#include<iostream>
#include<cmath>
#include<queue>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int n,m,a,b;
int e[N],ne[N],h[N],idx;
int d[N],top[N],cnt=1;//top是拓扑排序的序列,cnt代表top中有多少元素
void add(int a,int b)
{e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
bool topsort()
{queue<int> q;int t;for(int i=1;i<=n;i++)if(d[i]==0) q.push(i);//将所有入度为0的点都加入到队列之中while(q.size()){t=q.front();//每次取出队头top[cnt]=t;//加入到拓扑排序之中cnt++;//拓扑排序中的元素加1q.pop();for(int i=h[t];i!=-1;i=ne[i])//遍历t点的出边{int j=e[i];d[j]--;//入度减少if(d[j]==0) q.push(j);//如果j的入度为0,加入到队列之中}}if(cnt<n) return 0;else return 1;
}
int main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);memset(h,-1,sizeof h);//邻接表一开始没有装入任何数据,下标就是都是从-1开始的cin>>n>>m;while(m--){cin>>a>>b;add(a,b);d[b]++;//a到b b的入度++}if(topsort()==0) cout<<"-1"<<endl;else{for(int i=1;i<=n;i++)cout<<top[i]<<" ";cout<<endl;}return 0;
}