#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
int h[100000*2+10],nex[100000*2+10],to[100000+10],con=1,n;
int et[100000+10];
void bfs()
{
queue<int>q;
vector<int>ans;
for(int i=1;i<=n;++i)
if(!et[i])//将入度为0的点加入队列
{q.push(i);ans.push_back(i);}
while(!q.empty())
{
int now=q.front();q.pop();
for(int i=h[now];i;i=nex[i])
{
if(et[to[i]])
{
et[to[i]]--;//在图中删除该点使入度--
if(!et[to[i]])//产生新的入度为0的点
{
q.push(to[i]);
ans.push_back(to[i]);
}
}
}
}
if(ans.size()==n)//拓扑序列元素个数等于所有点数
{
cout<<ans[0];
for(int i=1;i<ans.size();++i)
printf(" %d",ans[i]);
cout<<endl;
}
else
cout<<-1<<endl;
}
int main()
{
int m;
cin>>n>>m;
while(m--)
{
int a,b;scanf("%d%d",&a,&b);
to[con]=b;
nex[con]=h[a];
h[a]=con++;
et[b]++;
}
bfs();
return 0;
}