#include<cstdio>
#include<queue>
#define N 1000010
using namespace std;
int n,m,dis[N],vis[N],head[N],cnt=1;
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;
}