#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int DN=1e5+5;
int n,m,f,g,b[DN],a[DN],ma,dp[DN];
vector<int>v[DN];
void dfs(int nod)
{
	for(auto i:v[nod])
	{
		dp[i]=max(dp[i],dp[nod]+1);
		a[i]++;
		if(a[i]==b[i])
			dfs(i);
	}
}
int main()
{
    cin>>n>>m;
    while(m--)
    {
    	cin>>f>>g;
    	v[f].pb(g);
    	b[g]++;
    }
    for(int i=1;i<=n;i++)
    	if(b[i]==0)
    		dfs(i);
    for(int i=1;i<=n;i++)
    	ma=max(ma,dp[i]);
    cout<<ma;
}
