#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstring>

using namespace std;

const int MAX = 21;

struct Edge{int src, dst, cost;};

vector<int> E[MAX];
bool come[MAX];
int inEdge[MAX];

int main(){
  int m,n;
  cin >> m >> n;
  while(n--){
    int a, b;
    cin >> a >> b;
    a--;b--;
    E[a].push_back(b);
    inEdge[b]++;
  }
  
  memset(come,false,sizeof(come));
  queue<int> Q;

  for(int i = 0; i < m; i++){
    if(inEdge[i] == 0) Q.push(i);
  }

  vector<int> ans;
  while(!Q.empty()){
    int now = Q.front();
    Q.pop();

    if(come[now]) continue;

    come[now] = true;
    ans.push_back(now+1);
    for(int i = 0; i < (int)E[now].size(); i++) inEdge[E[now][i]]--;
    for(int i = 0; i < m; i++) if(inEdge[i] == 0 && !come[i]) Q.push(i);
  }

  for(int i = 0; i < (int)ans.size(); i++) cout << ans[i] << endl;
  return 0;
}