#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void solve() { int n, m; std::cin >> n >> m; std::vector> g(n); for (int i = 0; i < m; i++) { int u, v; std::cin >> u >> v; u--, v--; g[u].push_back(v); } std::vector dp(n, std::vector(4, 1e8)); std::queue> q; // 11 q.emplace(0, 0); // final state (0, 11); dp[0][0] = 0; while (!q.empty()) { auto [u, state] = q.front(); q.pop(); for (int v : g[u]) { int nxt = state; if (v == n - 2) { nxt = (state | 2); } if (v == n - 1) { nxt = (state | 1); } if (dp[v][nxt] == 1e8) { dp[v][nxt] = dp[u][state] + 1; q.emplace(v, nxt); } } } if (dp[0][3] == 1e8) dp[0][3] = -1; std::cout << dp[0][3] << '\n'; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int t = 1; // std::cin >> t; while (t--) { solve(); } }