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

int n,m,ru[100005],t,num[100005],f[100005];
vector <int> dis[100005],x[100005];

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);
	}
	while(1){
		bool tmp=0;
		for(int i=1;i<=n;i++){
			if(ru[i]==0){
				tmp=1;
				num[++num[0]]=i;
				ru[i]=-1;
				int len=dis[i].size();
				for(int j=0;j<len;j++)
				ru[dis[i][j]]--;
			}
		}
		if(tmp==0)break;
	}
	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);
	}
	printf("%d\n",f[num[n]]);
}