#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
int dp[5050];
int b[5000005];
struct eat{
int f;
int l;
}w[5000005];
bool cmp(eat a,eat b){
if(a.l == b.l)return a.f < b.f;
return a.l < b.l;
}
int main(){
cin >> n >> m;
int i,j;
for(i = 1; i <= m; ++i){
cin >> w[i].f >> w[i].l;// 被吃的鱼 吃的鱼
b[w[i].f] = 1;
if(i <= n)dp[i] = 1;
}
sort(w+1,w+1+m,cmp);
// cout << "-----------" << endl;
// for(i = 1; i <= m; ++i)
// cout << w[i].f << " " << w[i].l << endl;
for(i = 1 ;i <= m; ++i){
for(j = n; j >= 1; --j)
if(j == w[i].l)dp[j] = max(dp[j],dp[w[i].f]+1) % 80112002;
// for(j = 1; j <= n; ++j)
// cout << dp[j] << " ";
// cout << endl;
}
int max = n;
for(i = n-1; i >= 1; --i)
if(dp[i] > dp[max] && b[i] == 0)max = i;
cout << dp[max];
return 0;
}