#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
ifstream f("sortaret.in");
ofstream g("sortaret.out");
vector<vector<int>> adj;
vector<int>vizitat;
vector<int>rezultat;
void dfs(int node){
vizitat[node]=1;
for(auto vecin : adj[node]){
if(!vizitat[vecin])
dfs(vecin);
}
rezultat.push_back(node);
}
int main(){
int n , m;
f>>n>>m;
adj.resize(n+1);
vizitat.resize(n+1);
int a,b;
for(int i =1 ; i<=m;i++){
f>>a>>b;
adj[a].push_back(b);
}
for(int i = 1 ; i<= n ;i++)
if(!vizitat[i])
dfs(i);
reverse(rezultat.begin(),rezultat.end());
for(int i = 0 ; i < n ; i++)
g<<rezultat[i]<<" ";
return 0;
}