#include<bits/stdc++.h>
using namespace std;
int n,m,h[100010],vis[100010],cnt=0,t[10010],in[100010];
vector <int>v[100010];
struct node
{
int from,to,next;
}eg[100010];
void add(int u,int v)
{
eg[cnt].to=v;
eg[cnt].next=h[u];
h[u]=cnt++;
}
int topsort()
{
queue<int>q;
int sum=0;
for(int i=1;i<=n;i++)
if(in[i]==0)
q.push(i),sum++;
while(!q.empty())
{
int now=q.front();
printf("%d ",now);
q.pop();
for(int i=h[now];i!=-1;i=eg[i].next)
{
in[eg[i].to]--;
if(in[eg[i].to]==0)
{
q.push(eg[i].to);
sum++;
}
}
}
if(sum<n)
printf("存在回路\n");
}
int main()
{
memset(h,-1,sizeof(h));
memset(in,0,sizeof(in));
scanf("%d%d",&n,&m);
while(m--)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,v);
in[v]++;
}
topsort();
return 0;
}