#include<bits/stdc++.h>
using namespace std;
const int N=1e6+55;
char arr[1100][1100];//邻接矩阵存储路径
bool st[1100];//判断点是否被更新过
int arr1[1100];//记录每一点的已经通过的通道数
int flag=0,m,n;
void BFS(int x)
{
queue<int> q;
q.push(x);
while(q.size())
{
int num=q.front();
q.pop();
for(int i=1;i<=n;i++)
{
if(arr[num][i]==1&&st[i]==false)
{
if(i==1)
{
flag=1;
if(arr1[num]+1<arr1[1]) arr1[1]=arr1[num]+1;//通过比较每一次更新arr1[1]中的最短路径个数
}
else
{
st[i]=true;
arr1[i]=arr1[num]+1;
q.push(i);
}
}
}
}
if(flag==0) cout<<"NO"<<'\n';
else
cout<<arr1[1]<<'\n';
}
int main()
{
int i,j,k;
while(cin>>n>>m)
{
flag=0;
for(i=1;i<=n;i++)
{
st[i]=false;
for(j=1;j<=n;j++)
{
arr[i][j]=0;
}
}
for(i=0;i<=1100;i++) arr1[i]=0;
for(i=1;i<=m;i++)
{
int w1,w2;
cin>>w1>>w2;
arr[w1][w2]=1;
}
st[n]=true;
arr1[1]=N;//开始将arr1[1]赋值最大用以方便更新
arr1[n]=0;
BFS(n);
}
return 0;
}