#include using namespace std; using ll = long long; const int INF = 1 << 30; bool chmin(int& a, int b) { if(a > b) { a = b; return true; } return false; } #define REP(i, n) for(int i=0;i<(int)(n);i++) int main() { int N, M; cin >> N >> M; vector> G(N); REP(i, M) { int a, b; cin >> a >> b; a--; b--; G[a].push_back(b); G[b].push_back(a); } vector dp(N, INF); dp[0] = 0; queue que; que.push(0); while(!que.empty()) { int u = que.front(); que.pop(); for(int v : G[u]) { if(chmin(dp[v], dp[u] + 1)) que.push(v); } } int ans = dp[N-1]; if(ans == INF) ans = -1; cout << ans << endl; }