#include<cstdio>
#include<cstring>
#include<algorithm>
using std::min;
const int N=100010;
struct node
{
int next,to,from;
}e[N],e2[N];
int first[N],first2[N];
int book[N];
int dfn[N],low[N],stack[N],cd[N];
int cnt=0;
void insert(int v,int u)
{
e[++cnt].to=u;e[cnt].from=v;e[cnt].next=first[v];first[v]=cnt;
}
int tot=0,top=0,num=0;
int size[N],color[N];
void tarjan(int x)
{
dfn[x]=low[x]=++tot;
book[x]=1;stack[++top]=x;
for(int i=first[x];i;i=e[i].next)
{
if(!dfn[e[i].to]) tarjan(e[i].to),low[x]=min(low[x],low[e[i].to]);
else if(book[e[i].to]) low[x]=min(low[x],low[e[i].to]);
}
if(dfn[x]==low[x])
{
++num;
while(stack[top]!=x)
{
book[stack[top]]=0;
color[stack[top]]=num;
size[num]++;
top--;
}
book[x]=0;
color[x]=num;
size[num]++;
top--;
}
}
void insert2(int v,int u)
{
e2[++cnt].to=u;e2[cnt].next=first2[v];first2[v]=cnt;
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
int v,u;
for(int i=1;i<=m;i++)
{
scanf("%d %d",&v,&u);
insert(v,u);
}
int ans=0;
for(int i=1;i<=n;i++) if(!dfn[i]) tarjan(i);
for(int i=1;i<=num;i++) if(size[i]!=1) ans++;
printf("%d\n",ans);
cnt=0;
for(int i=1;i<=m;i++)
if(color[e[i].from]!=color[e[i].to]) cd[color[e[i].from]]++,insert(color[e[i].from],color[e[i].to]);
ans=0;
int aim=0;
// printf("=======\n");
// for(int i=1;i<=num;i++)
// {
// printf("std:: %d , %d ",i,cd[i]);
// for(int j=1;j<=n;j++) if(color[j]==i) printf("%d ",j);
// printf("\n");
// }
for(int i=1;i<=num;i++) if(!cd[i]) ans++,aim=i;
if(ans!=1) printf("-1");
else
{
if(size[aim]==1) printf("-1");
else for(int i=1;i<=n;i++) if(color[i]==aim) printf("%d ",i);
}
return 0;
}