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: N, M = (int(i) for i in input().split()) 
  
  outs = [[] for i in range(N)]
  ins = [0] * N
  
  
  for _ in range(M):
      x, y = (int(i) for i in input().split())
      x -= 1
      y -= 1
      outs[x].append(y)
      ins[y] += 1
  
  q = []
  for i in range(N):
      if ins[i] == 0:
          q.append(i)
  
  result = []
  while q != []:
      qn = q.pop(0)
      result.append(qn)
      for v in outs[qn]:
          ins[v] -= 1
          if ins[v] == 0:
              q.append(v)
  
  
  last = [0] * N
  # last[i] = iが最後だったときに最長のパス
  for sq in result:
      for v in outs[sq]:
          last[v] = max(last[v], last[sq] + 1)
  
  print(max(last)
  
  
       
  
  
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)"}]