# https://a...content-available-to-author-only...r.jp/contests/dp/submissions/20050310
# 再帰上限を増やすimport sys
import sys
from collections import deque
sys.setrecursionlimit(1000000)
N, M = list(map(int, input().split()))
# edges[i]: 頂点 i から辺が伸びている頂点たち(隣接リスト)
edges = []
for i in range(N):
edges.append([])
# 入次数。始点の判定に使う
indeg = [0] * N
# 辺の入力を受け取り、隣接リストを作る
for i in range(M):
x, y = list(map(int, input().split()))
edges[x - 1].append(y - 1)
indeg[y - 1] += 1
# トポロジカルソートを実行し、結果を格納するリスト
order = []
# 入次数が0の頂点をキューに追加
queue = deque([i for i in range(N) if indeg[i] == 0])
while queue:
# キューから頂点を取り出す
u = queue.popleft()
order.append(u)
# u から伸びる辺を削除し、入次数が0になった頂点をキューに追加
for v in edges[u]:
indeg[v] -= 1
if indeg[v] == 0:
queue.append(v)
# 各頂点から始まる最長経路の長さを格納するリスト
length = [0] * N
# トポロジカルソートで得られた順序に沿って最長経路を更新
for u in order:
for v in edges[u]:
length[v] = max(length[v], length[u] + 1)
print(max(length))
IyBodHRwczovL2EuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLnIuanAvY29udGVzdHMvZHAvc3VibWlzc2lvbnMvMjAwNTAzMTAKCiMg5YaN5biw5LiK6ZmQ44KS5aKX44KE44GZaW1wb3J0IHN5cwppbXBvcnQgc3lzCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCgpzeXMuc2V0cmVjdXJzaW9ubGltaXQoMTAwMDAwMCkKCk4sIE0gPSBsaXN0KG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkpCgojIGVkZ2VzW2ldOiDpoILngrkgaSDjgYvjgonovrrjgYzkvLjjgbPjgabjgYTjgovpoILngrnjgZ/jgaHvvIjpmqPmjqXjg6rjgrnjg4jvvIkKZWRnZXMgPSBbXQpmb3IgaSBpbiByYW5nZShOKToKICAgIGVkZ2VzLmFwcGVuZChbXSkKCiMg5YWl5qyh5pWw44CC5aeL54K544Gu5Yik5a6a44Gr5L2/44GGCmluZGVnID0gWzBdICogTgoKIyDovrrjga7lhaXlipvjgpLlj5fjgZHlj5bjgorjgIHpmqPmjqXjg6rjgrnjg4jjgpLkvZzjgosKZm9yIGkgaW4gcmFuZ2UoTSk6CiAgICB4LCB5ID0gbGlzdChtYXAoaW50LCBpbnB1dCgpLnNwbGl0KCkpKQogICAgZWRnZXNbeCAtIDFdLmFwcGVuZCh5IC0gMSkKICAgIGluZGVnW3kgLSAxXSArPSAxCgojIOODiOODneODreOCuOOCq+ODq+OCveODvOODiOOCkuWun+ihjOOBl+OAgee1kOaenOOCkuagvOe0jeOBmeOCi+ODquOCueODiApvcmRlciA9IFtdCgojIOWFpeasoeaVsOOBjDDjga7poILngrnjgpLjgq3jg6Xjg7zjgavov73liqAKcXVldWUgPSBkZXF1ZShbaSBmb3IgaSBpbiByYW5nZShOKSBpZiBpbmRlZ1tpXSA9PSAwXSkKCndoaWxlIHF1ZXVlOgogICAgIyDjgq3jg6Xjg7zjgYvjgonpoILngrnjgpLlj5bjgorlh7rjgZkKICAgIHUgPSBxdWV1ZS5wb3BsZWZ0KCkKICAgIG9yZGVyLmFwcGVuZCh1KQoKICAgICMgdSDjgYvjgonkvLjjgbPjgovovrrjgpLliYrpmaTjgZfjgIHlhaXmrKHmlbDjgYww44Gr44Gq44Gj44Gf6aCC54K544KS44Kt44Ol44O844Gr6L+95YqgCiAgICBmb3IgdiBpbiBlZGdlc1t1XToKICAgICAgICBpbmRlZ1t2XSAtPSAxCiAgICAgICAgaWYgaW5kZWdbdl0gPT0gMDoKICAgICAgICAgICAgcXVldWUuYXBwZW5kKHYpCgojIOWQhOmggueCueOBi+OCieWni+OBvuOCi+acgOmVt+e1jOi3r+OBrumVt+OBleOCkuagvOe0jeOBmeOCi+ODquOCueODiApsZW5ndGggPSBbMF0gKiBOCgojIOODiOODneODreOCuOOCq+ODq+OCveODvOODiOOBp+W+l+OCieOCjOOBn+mghuW6j+OBq+ayv+OBo+OBpuacgOmVt+e1jOi3r+OCkuabtOaWsApmb3IgdSBpbiBvcmRlcjoKICAgIGZvciB2IGluIGVkZ2VzW3VdOgogICAgICAgIGxlbmd0aFt2XSA9IG1heChsZW5ndGhbdl0sIGxlbmd0aFt1XSArIDEpCgpwcmludChtYXgobGVuZ3RoKSkK