#include using namespace std; #define LL long long #define rep(i, a, b) for(LL i=(a); i<(b); i++) template bool chmin(T& a, const T& b) { return a>b ? a=b,1 : 0; } int main() { int N, M; cin >> N >> M; vector E[1<<17]; rep(_, 0, M) { int u, v; cin >> u >> v; u--; v--; E[u].push_back(v); E[v].push_back(u); } const int inf = 1<<27; deque> que = {{0, 0}}; int d[4][1<<17]; rep(i, 0, 4) rep(j, 0, 1<<17) { d[i][j] = inf; } d[0][0] = 0; while(!que.empty()) { auto [k, i] = que.front(); que.pop_front(); for(auto j: E[i]) { int xk = k; if (j == N-2) { xk |= 1; } if (j == N-1) { xk |= 2; } if (chmin(d[xk][j], d[k][i]+1)) { que.push_back(make_pair(xk, j)); } } } if (d[3][0] == inf) { d[3][0] = -1; } cout << d[3][0]; }