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: from _collections import defaultdict
  import sys
  
  
  class Graph:
  
      def __init__(self, n):
          self.g = defaultdict(list)
          self.dp = [-1 for i in range(n + 1)]
  
      def add_edge(self, x, y):
          self.g[x].append(y)
  
      def longest_path_util(self, node):
  
          if self.dp[node] != -1:
              return self.dp[node]
  
          leaf = 1
          best_child = 0
          for neib in self.g[node]:
              leaf = 0
              best_child = max(best_child, self.longest_path_util(neib))
  
          if leaf != 0:
  
              self.dp[node] = 0
  
          else:
              self.dp[node] = best_child + 1
  
          return self.dp[node]
  
      def longest_path(self, n):
  
          ans = 0
  
          for i in range(1, n + 1):
  
              ans = max(ans, self.longest_path_util(i))
  
          return ans
  
  
  n, k = map(int, input().split())
  graph = Graph(n)
  for _ in range(k):
      x, y = list(map(int, sys.stdin.readline().split()))
      graph.add_edge(x, y)
  
  print(graph.longest_path(n))
  
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)"}]