#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;

int n,m,ru[100005],t,num[100005],f[100005],ans=0;
vector <int> dis[100005],x[100005];
queue <int> que;

int main(void){
	int t=n;
	scanf("%d %d",&n,&m);
	for(int i=1;i<=m;i++){
		int a,b;
		scanf("%d %d",&a,&b);
		ru[b]++;
		dis[a].push_back(b);
		x[b].push_back(a);
	}
	for(int i=1;i<=n;i++)
	if(ru[i]==0)que.push(i);
	while(!que.empty()){
		int u=que.front();
		num[++num[0]]=u;
		que.pop();
		int len=dis[u].size();
		for(int i=0;i<len;i++){
			ru[dis[u][i]]--;
			if(ru[dis[u][i]]==0)que.push(dis[u][i]);
		}
	}
	for(int i=1;i<=n;i++){
		int len=x[num[i]].size();
		for(int j=0;j<len;j++)
		f[num[i]]=max(f[num[i]],f[x[num[i]][j]]+1);
		ans=max(ans,f[num[i]]);
	}
	printf("%d\n",ans);
}