#include <bits/stdc++.h>
using namespace std;
#define int long long int
vector<int> adj[100005];
int dp[100005];
int dfs(int n){
	if(dp[n]) return dp[n];
	int mx = 0;
	for(int t:adj[n]){
		mx = max(mx,dfs(t));
	}
	return dp[n]=mx+1;
}
int32_t main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int t1,t2;
		cin>>t1>>t2;
		adj[t1].push_back(t2);
	}
	for(int i=1;i<=n;i++){
		dfs(i);
	}
	//for(int i=1;i<=n;i++){
	//	cout<<dp[i]<<" ";
	//}
	//cout<<"\n";
	cout<<*max_element(dp,dp+n+1)-1;
}
