#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxn 500001
using namespace std;
struct data{
int to,next;
}t[maxn*2];
int js,head[maxn],top,stack[maxn];
int n,m,du[maxn],ans[maxn];
inline void add(int u,int v){
t[++js].next=head[u];
t[js].to=v;
head[u]=js;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v; cin>>u>>v;
add(u,v); du[u]++;
}
for(int i=1;i<=n;i++){
if(du[i]==0){
top++; ans[i]=1; stack[++top]=i;
}
}
while(top>0){
int x=stack[top]; top--;
for(int i=head[x];i;i=t[i].next){
ans[t[i].to]=(ans[t[i].to]+ans[x])%80112002; du[t[i].to]--;
if(du[t[i].to]==0){
stack[++top]=t[i].to;
}
}
}
int maxx=-1;
for(int i=1;i<=n;i++){
if(ans[i]>maxx){
maxx=ans[i];
}
}
cout<<maxx;
return 0;
}