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

using namespace std;

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

vector<int> topological_sort(const vector<Edge>& graph){
  const int MAX = 21;
  int inEdge[MAX];
  bool come[MAX];
  vector<int> node;
  vector<int> order;
  queue<int> Q;

  memset(inEdge,0,sizeof(inEdge));
  memset(come,false,sizeof(come));
 
  for(int i = 0; i < (int)graph.size(); i++) {
    node.push_back(graph[i].src);
    node.push_back(graph[i].dst);
  }
  sort(node.begin(),node.end());
  node.erase(unique(node.begin(),node.end()),node.end());

  for(int i = 0; i < (int)graph.size(); i++) inEdge[graph[i].dst]++;
  for(int i = 0; i < (int)node.size(); i++) if(inEdge[node[i]]==0) Q.push(node[i]);
 
  while(!Q.empty()){
    int now = Q.front();
    Q.pop();

    if(come[now]) continue;
    come[now] = true;

    order.push_back(now);
    for(int i = 0; i < (int)graph.size(); i++) if(graph[i].src==now) inEdge[graph[i].dst]--;
    for(int i = 0; i < (int)node.size(); i++) if(inEdge[node[i]]==0 && !come[node[i]]) Q.push(node[i]);
  }
  return order;
}

int main(){
  int m,n;
  cin >> m >> n;
  vector<Edge> V(n);
  for(int i = 0; i < n; i++) cin >> V[i].src >> V[i].dst;
  vector<int> ans = topological_sort(V);
  for(int i = 0; i < (int)ans.size(); i++) cout << ans[i] << endl;
  return 0;
}