#include<bits/stdc++.h>
using namespace std;
int n,m;
const int MaxN=2e6;
vector<int> G[MaxN];
int out[MaxN],in[MaxN];
int mem[MaxN];
const int mode=80112002;
int dfs(int);
int main(){
memset(mem,-1,sizeof(mem));
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
G[x].push_back(y);
out[x]++;
in[y]++;
}
for(int i=0;i<(int)G[i].size();i++)
{
sort(G[i].begin(),G[i].end());
}
int ans=0;
for(int i=1;i<=m;i++){
if(in[i]==0){
ans=max(ans,dfs(i));
}
}
ans%=mode;
cout<<ans<<"\n";
}
int dfs(int x){
if(mem[x]!=-1){
return mem[x];
}
if(out[x]==0){
mem[x]=1;
return 1;
}
for(int i=0;i<(int)G[x].size();i++){
mem[x]=max(mem[x],dfs(G[x][i])+1)%mode;
}
return mem[x];
}