#include<bits/stdc++.h>
using namespace std;
#define ft first
#define sd second
typedef long long ll;
typedef vector<bool> veb;
typedef vector<ll> vel;
typedef vector<vel> vevel;
typedef vector<vevel> vevevel;
typedef vector<pair<ll,ll>> velp;
typedef vector<pair<bool,bool>> velb;
typedef vector<char> vec;
typedef map<ll,ll> mll;
typedef map<char,ll> mcl;
typedef map<ll,char> mlc;
typedef map<ll,bool> mlb;
typedef map<char,char> mcc;
typedef vector<pair<char,char>> vecp;
typedef priority_queue<ll,vector<ll>,greater<>> pql;
typedef vector<pql> vpql;
typedef vector<queue<ll>> vql;
typedef vector<set<ll>> vsl;
const ll mo = 1e9+7;
vevel side;
vel inf;
ll ans=0;
void dfs(ll x,ll cot){
cot++;
for(auto i:side[x]){
inf[i]--;
}
for(auto i:side[x]){
if(inf[i]==0){
dfs(i,cot);
}
}
ans=max(ans,cot);
}
void slv(){
int n,m;
cin>>n>>m;
side=vevel(n+1);
inf=vel(n+1);
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
side[x].push_back(y);
inf[y]++;
}
for(ll i=1;i<=n;i++){
if(inf[i]==0){
dfs(i,0);
}
}
cout<<ans%80112002;
}
int main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
ll t=1;
while(t--){
slv();
}
return 0;
}