#include <bits/stdc++.h>
#define int long long int
#define S second
#define F first

using namespace std ;

const int N = 2e6 + 100 , M = 1e5 + 100;
int dp[N] , n , m , cnt[N] , k[N] ;
pair <int , int> p[N] ;
vector <int> v[N] , ans;
queue <int> q ;

int32_t main(){
	cin >> n >> m ;
	for(int i = 0 ; i < m ; i++){
		int aa , bb ;
		cin >> aa >> bb ;
		v[aa-1].push_back(bb - 1) ;
		cnt[bb - 1]++ ;
	}
	for(int i = 0 ; i < n ; i++){
		if(cnt[i] == 0){
			q.push(i) ;
		}
	}
	while(q.size()){
		int u = q.front() ;
		q.pop() ;
		ans.push_back(u) ;
		for(auto x : v[u]){
			cnt[x]-- ;
			if(!cnt[x]){
				q.push(x) ;
			}
		}
	}
	//sort(p , p + n) ; 
	reverse(ans.begin() , ans.end()) ;
	for(int i = 0 ; i < n ; i++){
		k[ans[i]] = i ;
	}
	int mx = 0 ;
	for(int i = 0 ; i < n ; i++){
		//cout << ans[i] << " " ;
		for(auto j : v[ans[i]]){
			dp[i] = max(dp[k[j]] + 1 , dp[i]) ;
		}
		mx = max(mx , dp[i]) ;
	}
	cout << mx;
	return 0 ; 
}
/*
#include <radman/roderc++.h>
                     ....._____
                 .~~~~~////////\\                                                                                           ...
              .:::::////////////\\                                          ....::////////..                              (/\\\\...
           .::::://////   \\\\///\\              .:::://                ..:::::///////////////.                           \\\\\$$$$$$
         \\\\\//////      \\\\///\\           //\\\//////             \\\\\////////////////////.                           ""\\$$$$$$$
         \\\\\////         \\\\////         |||||////////.            \\\\\/////     ~~~~~//////          ...                  "\$$$$
         \\\\\//\         ////|||/          \\\\\/////////            \\\\\//\       ~~~~~//////        (/\\\\...                   .
         \\\\\//\        ////|||/          |||||////*\\///.           \\\\\//\       ~~~~~//////        \\\\\$$$$$$                 .@@@@@.
         \\\\\//\       ////|||/           \\\\\///|\\\////           \\\\\//\       ~~~~~//////         ""\\$$$$$$$               @@@@////\
         \\\\\//\ ____---/|||/            |||||///|\\\\\///.          \\\\\//\       ~~~~~//////             "\$$$$                @@@@\///\
         \\\\\//\--|||||||_-'             \\\\\///|\\\\\////          \\\\\//\       ~~~~~//////                                  ,@@@@|///|
         \\\\\//\|||||_"-\\\\\           |||||///|  ~~~~~///.         \\\\\//\      ~~~~~//////     .@@@@.                    /@@@@@|/////
         \\\\\//\///"""\\\\\\\\          \\\\\///|~~~~[[[////.        \\\\\//\     ~~~~~//////      @@@@@@@@                ..@@@@@.//////
         \\\\\//\    \"""\\\\\\\        |||||///|~~[[[[["\////.       \\\\\//\    ~~~~~//////      '@@@@/////\       .:;@@@@@@@..///////"
         \\\\\//\      \"""\\\\\\       \\\\\///|[[[[*\\\\\////.      \\\\\//\   ~~~~~//////        *@@@\//////\@@@@@@@@..//////////"
         \\\\\//\       \:::\\\\/      |||||///|[[[*   \\\\\\///      \\\\\//\~~~~~///////'            *@@\/////////////////////"
         \\\\\//\        \___\\/       \\\\\///|*       \\\\\/"       \\\\\//\~~////////'                 **"///////////"""
         \\\\\//\                     |||||///|                       \\\\\//\///////"
         \\\\\//\                     \\\\\///|                       \\\\\//\////"
         \\\\\///                    |||||////|                       \\\\\////"
         \\\\\/"                     \\\\\///*                        \\\\\/"
                                     """""*
*/


Measured memory_bytes: 59508