#include using namespace std; int main(){ int64_t res = 0; int64_t N, K; cin >> N >> K; if(K == 0){ cout << 1 << '\n'; return 0; } vector> edge(N); vector in_count(N, 0); while(K--){ int64_t r, c; cin >> r >> c; r--; c--; edge[c].push_back(r); in_count[r]++; } queue> que; for(int64_t i = 0; i < N; i++) if(in_count[i] == 0) que.push({i, 0}); while(not que.empty()){ auto [vis, c] = que.front(); que.pop(); res = max(res, c); for(auto nxt : edge[vis]) if(--in_count[nxt] == 0) que.push({nxt, c+1}); } cout << (none_of(in_count.begin(), in_count.end(), [](auto x){return x > 0;}) ? res+1 : -1) << '\n'; }