#include<bits/stdc++.h>
using namespace std;
typedef long long int64;
 
typedef vector< vector< int > > Graph;
 
inline void dfs(int idx, const Graph& graph, vector< bool >& used, vector< int >& order){
  if(used[idx]) return;
  used[idx] = true;
  for(int i = 0; i < graph[idx].size(); i++) {
    dfs( graph[idx][i], graph, used, order);
  }
  order.push_back(idx);
}
inline void rdfs(int idx, const Graph& rgraph, vector< int >& cmp, const int& cnt){
  cmp[idx] = cnt;
  for(int i = 0; i < rgraph[idx].size(); i++) {
    if(cmp[rgraph[idx][i]] == -1) rdfs( rgraph[idx][i], rgraph, cmp, cnt);
  }
}
  
size_t StronglyConnectedComponents(const Graph& graph, const Graph& rgraph, vector< int >& cmp){
  size_t cnt = 0;
  cmp.assign( graph.size(), -1);
  static vector< bool > used(graph.size(), false);
  vector< int > order;
  for(int i = 0; i < graph.size(); i++) {
    dfs(i, graph, used, order);
  }
  reverse( order.begin(), order.end());
  for(int i = 0; i < order.size(); i++) {
    if(cmp[order[i]] == -1) rdfs( order[i], rgraph, cmp, cnt), cnt++;
  }
  return cnt;
}
 
typedef pair< int , int > Pi;
 
int main(){
  int n, m;
  cin >> n;
  cin >> m;
  Graph graph(n), rgraph(n);
  for(int i = 0; i < m; i++){
    int a, b;
    cin >> a >> b;
    --a, --b;
    graph[a].push_back(b);
    rgraph[b].push_back(a);
  }
  vector< int > cmp;
  int sz = StronglyConnectedComponents( graph, rgraph, cmp);
 
  vector< Pi > ret(n);
  for(int i = 0; i < n; i++){
    ret[i] = make_pair( cmp[i], i);
  }
  sort( ret.begin(), ret.end());
  bool flag = false;
  for(int i = 0; i < n; i++){
    cout << ret[i].second + 1 << endl;
  }
}