#include<bits/stdc++.h>
using namespace std;
int m,n,p=0,ans=0,w[1000002]={0},head[1000002]={0},Next[2000004]={0},ver[2000004],tot=0,d[1000010]={0},f[1000005]={0},sum=0;
void add(int a,int b)
{
ver[++tot]=b;
Next[tot]=head[a];
head[a]=tot;
}
struct k
{
int x;
int y;
}a[100010];
bool cmp(k p,k q)
{
return p.x>q.x||(p.x==q.x&&p.y>q.y);
}
void dfs(int x)
{
sum++;
if(sum==1)
cout<<x;
else
cout<<" "<<x;
for(int i=head[x];i;i=Next[i])
{
int y=ver[i];
if(f[y]==0)
{
f[y]=1;
dfs(y);
}
}
return ;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
}
sort(a+1,a+m+1,cmp);
for(int i=1;i<=m;i++)
{
add(a[i].x,a[i].y);
}
for(int i=1;i<=n;i++)
if(f[i]==0)
{
f[i]=1;
dfs(i);
}
cout<<endl;
for(int j=1;j<=n;j++)
{
if(w[j]==0)
{
w[j]=1;
queue <int> q;
q.push(j);
while(q.size())
{
int x=q.front();
q.pop();
cout<<x<<" ";
for(int i=head[x];i;i=Next[i])
{
int y=ver[i];
if(w[y]==0)
{
w[y]=1;
q.push(y);
}
}
}
}
}
return 0;
}