#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mp make_pair
#define REP(i,n) for(int i=0;i<(int)n;++i)
#define pii pair<int,int>
using namespace std;
int n,m;
vector<int> g[100005];
int len[100005];
int ru[100005];
int main()
{
	cin>>n>>m;
	for(int i=0;i<m;i++){
		int a,b;
		cin>>a>>b;
		--a,--b;
		g[a].push_back(b);
		ru[b]++;
	}
	stack<int> s;
	REP(i,n) if(ru[i]==0) s.push(i);
	while(s.size()){
		int p=s.top();
		s.pop();
		for(int i=0;i<g[p].size();i++){
			int to=g[p][i];
			if(len[p]+1>len[to]){
				len[to]=len[p]+1;
			}
			ru[to]--;
			if(ru[to]==0) s.push(to);
		}
	}
	int res=1;
	for(int i=0;i<n;i++){
		res=max(res,len[i]);
	}
	cout<<res<<endl;
	return 0;
}
