#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef pair Pii; const ll mod = 998244353; int main() { cin.tie(0); ios::sync_with_stdio(false); int n, m; cin >> n >> m; vector> edge(n); for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; edge[u-1].push_back(v-1); } int ans = -1; vector> visited(4, vector(n)); deque> que; que.emplace_back(0, 0, 0); while (!que.empty()) { auto [dist, now_task, now_id] = que.front(); que.pop_front(); if (visited[now_task][now_id]) continue; visited[now_task][now_id] = true; if (now_task == 3 && now_id == 0) { ans = dist; break; } if (now_id == n - 2 && (now_task & 1) == 0) { que.emplace_front(dist, now_task | 1, now_id); continue; } if (now_id == n - 1 && (now_task & 2) == 0) { que.emplace_front(dist, now_task | 2, now_id); continue; } for (auto &next_id: edge[now_id]) { if (!visited[now_task][next_id]) { que.emplace_back(dist + 1, now_task, next_id); } } } cout << ans << endl; return 0; }