#include<cstdio>
#include<queue>
#define N 1000010
using namespace std;
int n,m,dis[N],head[N],cnt=1;
bool vis[N];
queue <int> q;
struct hhh
{
int to,next;
}edge[N];
void add(int u,int v)
{
edge[cnt].to=v;
edge[cnt].next=head[u];
head[u]=cnt++;
}
void bfs()
{
q.push(1);
vis[1]=1;
while (!q.empty())
{
int r=q.front();q.pop();
for (int i=head[r];i;i=edge[i].next)
if (!vis[edge[i].to])
vis[edge[i].to]=1,dis[edge[i].to]=dis[r]+1,q.push(edge[i].to);
}
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=1,u,v;i<=m;i++)
{
scanf("%d%d",&u,&v);
add(u,v);
}
bfs();
printf("%d",dis[n]);
return 0;
}