#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define PII pair<int,int>
#define tul tuple<int,int,int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rep_(i,a,b) for(int i=a;i>=b;--i)
#define all(x) x.begin(),x.end()
#define cy cout<<"YES"<<endl
#define cn cout<<"NO"<<endl
#define lc (rt<<1)
#define rc (rt<<1|1)
const int N=3e5+6,yyx=1e9+7;
int n,m;
vector<int> to[N];
inline void solve(){
cin>>n>>m;
vector<int> dp(n+1,0);
for(int i=1;i<=m;++i){
int u,v;cin>>u>>v;
dp[v]=max(dp[v],dp[u]+1);
}
int ans=0;
for(int i=1;i<=n;++i) ans=max(ans,dp[i]);
cout<<ans<<endl;
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
//freopen("D://321//in.txt","r",stdin);
//freopen("D://321//out.txt","w",stdout);
int _=1;
//cin>>_;
while(_--)
solve();
return 0;
}