output_description: Print the length of the longest directed path in G.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N M
      x_1 y_1
      x_2 y_2
      :
      x_M y_M
attempt: import sys
  
  input = sys.stdin.readline
  n, m = map(int, input().split())
  infi = 10**10
  # topological sort
  # 通常のグラフ構成のグラフ
  graph1 = [[] for _ in range(n + 1)]
  # 入ってくる辺の数を記録するグラフ
  graph2 = [0 for _ in range(n + 1)]
  for _ in range(m):
      x, y = map(int, input().split())
      graph1[x].append(y)
      graph2[y] += 1
  # start地点になるのは入ってくる辺の数が0の点
  start = []
  for i in range(1, n + 1):
      if graph2[i] == 0:
          start.append(i)
  start2 = start[::]
  # start地点から
  # ①topoリストに加える
  # ②隣接点の入ってくる辺の数を減らす
  # ③入ってくる辺の数が0になったらstartに加える
  # を繰り返す
  # ※今回はtopoに加えるのは本質ではない。
  # topoに加えていく順序で見ていきながら距離を入れていく。
  # topo=[]
  dist = [infi] * (n + 1)
  for i in start:
      dist[i] = 0
  while start:
      a = start.pop()
      kyori = dist[a]
      #     topo.append(a)
      for b in graph1[a]:
          graph2[b] -= 1
          if graph2[b] == 0:
              start.append(b)
              dist[b] = min(dist[b], dist[a] + 1)
  print(max(dist[1:]))
  
problem_description: Statement
  
  There is a directed graph G with N vertices and M edges. The vertices are
  numbered 1, 2, \ldots, N, and for each i (1 \leq i \leq M), the i-th directed
  edge goes from Vertex x_i to y_i. G **does not contain directed cycles**.
  
  Find the length of the longest directed path in G. Here, the length of a
  directed path is the number of edges in it.
samples: [{"input": "4 5\n    1 2\n    1 3\n    3 2\n    2 4\n    3 4", "output": "3\n    \n\nThe red directed path in the following figure is the longest:\n\n![](https://img.atcoder.jp/dp/longest_0_muffet.png)\n\n* * *"}, {"input": "6 3\n    2 3\n    4 5\n    5 6", "output": "2\n    \n\nThe red directed path in the following figure is the longest:\n\n![](https://img.atcoder.jp/dp/longest_1_muffet.png)\n\n* * *"}, {"input": "5 8\n    5 3\n    2 3\n    2 4\n    5 2\n    5 1\n    1 4\n    4 3\n    1 3", "output": "3\n    \n\nThe red directed path in the following figure is one of the longest:\n\n![](https://img.atcoder.jp/dp/longest_2_muffet.png)"}]