#include<bits/stdc++.h>
using namespace std;
#define ll long long
vector<int> a[100005];
ll dp[100005];
ll dfs(ll u){
if (dp[u] != - 1){
return dp[u];
}
ll ans = 0;
for (auto i : a[u]){
ans = max(ans , dfs(i) + 1);
}
return dp[u] = ans;
}
void solve(){
ll n , m;
cin >> n >> m;
for (int i = 1 ; i <= m ; i++){
ll x ,y;
cin >> x >> y;
a[x].push_back(y);
}
memset(dp , -1 , sizeof(dp));
ll ans = 0;
for (ll i = 1 ; i <= n ; i++){
ans = max(ans , dfs(i));
}
cout << ans;
}
int main(){
solve();
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcKdmVjdG9yPGludD4gYVsxMDAwMDVdOwpsbCBkcFsxMDAwMDVdOwpsbCBkZnMobGwgdSl7CiAgICBpZiAoZHBbdV0gIT0gLSAxKXsKICAgICAgICByZXR1cm4gZHBbdV07CiAgICB9CiAgICBsbCBhbnMgPSAwOwogICAgZm9yIChhdXRvIGkgOiBhW3VdKXsKICAgICAgICBhbnMgPSBtYXgoYW5zICwgZGZzKGkpICsgMSk7CiAgICB9CiAgICByZXR1cm4gZHBbdV0gPSBhbnM7Cn0Kdm9pZCBzb2x2ZSgpewogICAgbGwgbiAsIG07CiAgICBjaW4gPj4gbiA+PiBtOwogICAgZm9yIChpbnQgaSA9IDEgOyBpIDw9IG0gOyBpKyspewogICAgICAgIGxsIHggLHk7CiAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICBhW3hdLnB1c2hfYmFjayh5KTsKICAgIH0KICAgIG1lbXNldChkcCAsIC0xICwgc2l6ZW9mKGRwKSk7CiAgICBsbCBhbnMgPSAwOwogICAgZm9yIChsbCBpID0gMSA7IGkgPD0gbiA7IGkrKyl7CiAgICAgICAgYW5zID0gbWF4KGFucyAsIGRmcyhpKSk7CiAgICB9CiAgICBjb3V0IDw8IGFuczsKfQppbnQgbWFpbigpewogICAgc29sdmUoKTsKfQo=