#include using namespace std; int main() { int N, M, INF = 1e8; cin >> N >> M; vector A, B, C; vector> G(N); for (int i = 0; i < M; i++) { int u, v; cin >> u >> v; G.at(u - 1).push_back(v - 1); } auto BFS = [&](int x) { vector dist(N, INF); queue Q; dist.at(x) = 0; Q.push(x); while (!Q.empty()){ int v = Q.front(); Q.pop(); for (int to : G.at(v)) { if (dist.at(to) != 1e8) continue; dist.at(to) = dist.at(v) + 1; Q.push(to); } } return dist; }; A = BFS(0); B = BFS(N - 2); C = BFS(N - 1); int Ans = min(A.at(N - 2) + B.at(N - 1) + C.at(0), A.at(N - 1) + C.at(N - 2) + B.at(0)); cout << (Ans < INF ? Ans : -1) << endl; }