#include <bits/stdc++.h>
using namespace std;
const int MAX=5010;
vector<int> a[MAX];//存储无向边
bool mark[5010];//标记边是否已被遍历
int bfs(int b,int d)
{
    queue<pair<int,int>> q;//使用先进先出的队列进行bfs
    q.push({b,0});//pair储存当前位置和已走距离
    mark[b]=true;//更新点状态
    while(!q.empty())
    {
        int x=q.front().first;
        int y=q.front().second;
        q.pop();//将点出队
        if(x==d)
            return y;
        else
            for(int i=0;i<a[x].size();i++)
                if(!mark[a[x][i]])
                {
                    mark[a[x][i]]=true;//更新点状态
                    q.push({a[x][i],y+1});//将点入队
                }
    }
    return -1;//未能到达终点
}
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=0;i<m;i++)
    {
        int u,v;
        cin>>u>>v;
        a[u].push_back(v);
        a[v].push_back(u);
    }
    for(int i=0;i<=n+1;i++)
        mark[i]=false;//标记点状态
    int result=bfs(1,n);
    cout<<result;
    return 0;
}