# include<iostream>
# include<vector>
# include<queue>
using namespace std;
const int N = 5001;
int n, m;
int dist[N];
bool vis[N];
vector<int> g[N];
queue<int> q;
void spfa(int s){
for(int i=1; i<=5000; i++){
dist[i] = (1ll << 31) - 1;
}
dist[s] = 0;
vis[s] = true;
q.push(s);
while(!q.empty()){
int x = q.front();
vis[x] = false;
q.pop();
for(int i=0; i<g[x].size(); i++){
int y = g[x][i];
if(dist[x] + 1 < dist[y]){
dist[y] = dist[x] + 1;
if(!vis[y]){
vis[y] = true;
q.push(y);
}
}
}
}
}
int main(){
cin >> n >> m;
int u, v;
for(int i=1; i<=m; i++){
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
spfa(1);
if(dist[n] == ((1ll << 31) - 1)){
cout << -1 << endl;
}else{
cout << dist[n] << endl;
}
return 0;
}