#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
void maximize(T& a, const T& b) {
if (a < b) a = b;
}
const int N = 1e5 + 5;
int n, m;
vector<int> adj[N];
bool vis[N];
vector<int> topo;
void dfs(int u) {
vis[u] = true;
for (int v : adj[u]) {
if (!vis[v]) dfs(v);
}
topo.push_back(u);
}
void topoSort() {
for (int u = 1; u <= n; u++) {
if (!vis[u]) dfs(u);
}
reverse(topo.begin(), topo.end());
}
int dp[N]; // dp[u] = Độ dài đường đi dài nhất kết thúc tại u
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
}
topoSort();
for (int u = 1; u <= n; u++) dp[u] = 0;
for (int u : topo) {
for (int v : adj[u]) {
maximize(dp[v], dp[u] + 1);
}
}
int ans = 0;
for (int u = 1; u <= n; u++) {
maximize(ans, dp[u]);
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBtYXhpbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYSA8IGIpIGEgPSBiOyAgCn0KCmNvbnN0IGludCBOID0gMWU1ICsgNTsgCgppbnQgbiwgbTsgIAp2ZWN0b3I8aW50PiBhZGpbTl07IAoKYm9vbCB2aXNbTl07IAp2ZWN0b3I8aW50PiB0b3BvOyAKCnZvaWQgZGZzKGludCB1KSB7Cgl2aXNbdV0gPSB0cnVlOyAgCglmb3IgKGludCB2IDogYWRqW3VdKSB7CgkJaWYgKCF2aXNbdl0pIGRmcyh2KTsgCgl9Cgl0b3BvLnB1c2hfYmFjayh1KTsgCn0KCnZvaWQgdG9wb1NvcnQoKSB7Cglmb3IgKGludCB1ID0gMTsgdSA8PSBuOyB1KyspIHsKCQlpZiAoIXZpc1t1XSkgZGZzKHUpOyAKCX0KCXJldmVyc2UodG9wby5iZWdpbigpLCB0b3BvLmVuZCgpKTsgCn0KCmludCBkcFtOXTsgLy8gZHBbdV0gPSDEkOG7mSBkw6BpIMSRxrDhu51uZyDEkWkgZMOgaSBuaOG6pXQga+G6v3QgdGjDumMgdOG6oWkgdQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJY2luID4+IG4gPj4gbTsgCgoJZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspIHsKCQlpbnQgdSwgdjsgCgkJY2luID4+IHUgPj4gdjsgCgkJYWRqW3VdLnB1c2hfYmFjayh2KTsgCgl9CgoJdG9wb1NvcnQoKTsgIAoKCWZvciAoaW50IHUgPSAxOyB1IDw9IG47IHUrKykgZHBbdV0gPSAwOyAgIAoKCWZvciAoaW50IHUgOiB0b3BvKSB7CgkJZm9yIChpbnQgdiA6IGFkalt1XSkgewoJCQltYXhpbWl6ZShkcFt2XSwgZHBbdV0gKyAxKTsgIAoJCX0KCX0KCglpbnQgYW5zID0gMDsgCglmb3IgKGludCB1ID0gMTsgdSA8PSBuOyB1KyspIHsKCQltYXhpbWl6ZShhbnMsIGRwW3VdKTsgIAoJfQoKCWNvdXQgPDwgYW5zIDw8ICdcbic7IAp9