#include <bits/stdc++.h>
#define rep(i,n)for(int i=0;i<(n);i++)
using namespace std;
typedef long long ll;
typedef pair<int,int>P;

const int MOD=1000000007;
const int INF=0x3f3f3f3f;
const ll INFL=0x3f3f3f3f3f3f3f3f;

vector<int>E[2000];
int d[2000][2000];
int prv[2000][2000];

void bfs(int v){
	d[v][v]=0;
	prv[v][v]=-1;
	queue<int>que;
	que.push(v);
	while(!que.empty()){
		int p=que.front();que.pop();
		for(int u:E[p]){
			if(d[v][u]==-1){
				d[v][u]=d[v][p]+1;
				prv[v][u]=p;
				que.push(u);
			}
		}
	}
}
int main(){
	int n,m;cin>>n>>m;
	rep(i,m){
		int a,b;scanf("%d%d",&a,&b);a--;b--;
		E[a].push_back(b);
	}
	memset(d,-1,sizeof(d));
	rep(i,n)bfs(i);
	int idx=-1,idy=-1;
	int Min=INF;
	rep(i,n)rep(j,n){
		if(i==j)continue;
		if(d[i][j]!=-1&&d[j][i]!=-1&&Min>d[i][j]+d[j][i]){
			Min=d[i][j]+d[j][i];
			idx=i;
			idy=j;
		}
	}
	if(Min==INF){
		puts("-1");return 0;
	}
	int x=idy;
	vector<int>v{idy};
	while(x!=idx){
		x=prv[idx][x];
		v.push_back(x);
	}
	while(x!=idy){
		x=prv[idy][x];
		if(x!=idy)v.push_back(x);
	}
	cout<<v.size()<<endl;
	reverse(v.begin(),v.end());
	for(int i:v){
		printf("%d\n",i+1);
	}
}