#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
#define MOD 80112002
using namespace std;
#define N 5001//存点有关的边->N为边
vector<int>a[N];
//深搜找出最长路径
int in[N]={ 0 };
int f[N] = { 0 };
queue<int>q;
int main() {
int n, m;
cin >> n >> m;//a[i][0]为生产者
for (int i = 0; i < m; i++)
{
int A, B;//被吃的生物A,吃A的生物B
cin >> A >> B;
a[A].push_back(B);
in[B]++;
}
for (int i = 0; i < n; i++) {
if (in[i] == 0) {
q.push(i);
f[i] = 1;
}
}
while (!q.empty()) {
int pro = q.front();
q.pop();
for (int i = 0; i < a[pro].size(); i++) {
int u = a[pro][i];
in[u]--;
if (in[u] == 0)
q.push(u);
f[u] = max(f[u]%MOD, (f[pro]+1)%MOD);
}
}
int max = INT_MIN;
for (int j = 1; j <= n; j++) {
if (max < f[j]) {
max = f[j];
}
}
printf("%d", max);
}