import sys
sys.setrecursionlimit(1000000)
def dfs(i):
if dp[i] != -1:
return dp[i]
dmax = 0
for j in adjlist[i]:
dmax = max(dmax, dfs(j) + 1)
dp[i] = dmax
return dmax
n, m = map(int, input().split())
adjlist = [[] for _ in range(n)]
s = set()
for _ in range(m):
x, y = map(int, input().split())
s.add(y - 1)
adjlist[x - 1].append(y - 1)
dp = [-1] * n
dmax = 0
for i in range(n):
if i not in s:
dmax = max(dmax, dfs(i))
print(dmax)
aW1wb3J0IHN5cwpzeXMuc2V0cmVjdXJzaW9ubGltaXQoMTAwMDAwMCkKCgpkZWYgZGZzKGkpOgogICAgaWYgZHBbaV0gIT0gLTE6CiAgICAgICAgcmV0dXJuIGRwW2ldCiAgICBkbWF4ID0gMAogICAgZm9yIGogaW4gYWRqbGlzdFtpXToKICAgICAgICBkbWF4ID0gbWF4KGRtYXgsIGRmcyhqKSArIDEpCiAgICBkcFtpXSA9IGRtYXgKICAgIHJldHVybiBkbWF4CgoKbiwgbSA9IG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkKYWRqbGlzdCA9IFtbXSBmb3IgXyBpbiByYW5nZShuKV0KcyA9IHNldCgpCmZvciBfIGluIHJhbmdlKG0pOgogICAgeCwgeSA9IG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkKICAgIHMuYWRkKHkgLSAxKQogICAgYWRqbGlzdFt4IC0gMV0uYXBwZW5kKHkgLSAxKQpkcCA9IFstMV0gKiBuCmRtYXggPSAwCmZvciBpIGluIHJhbmdlKG4pOgogICAgaWYgaSBub3QgaW4gczoKICAgICAgICBkbWF4ID0gbWF4KGRtYXgsIGRmcyhpKSkKcHJpbnQoZG1heCkK