output_description: Print the number of the edges that are bridges among the M edges.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N M  
      a_1 b_1  
      a_2 b_2
      :  
      a_M b_M
attempt: n, m = list(map(int, input().split()))
  
  ab = [list(map(int, input().split())) for i in range(m)]
  # 逆順にしたもの追加
  ab += [[b, a] for a, b in ab]
  
  # 辺id付きで、idがfrom,abi[from]=[to1,to2,...] のリスト
  abi = [[] for _ in range(n + 1)]
  for i, (a, b) in enumerate(ab):
      abi[a].append(b)
      abi[b].append(a)
  
  
  # 再起のlimitを上げる
  import sys
  
  sys.setrecursionlimit(4100000)
  
  from collections import deque
  
  
  def dfs(i):
      visitted.append(i)
      flg = False
      for x in abi[i]:
          if x not in visitted and (i, x) != blocked and (x, i) != blocked:
              dfs(x)
              flg = True
      return len(visitted) == n
  
  
  ret = 0
  for i in range(m):
      blocked = (ab[i][0], ab[i][1])
      visitted = deque([])
      if not dfs(1):
          ret += 1
  
  print(ret)
  
problem_description: Statement
  
  You are given an undirected connected graph with N vertices and M edges that
  does not contain self-loops and double edges.  
  The i-th edge (1 \leq i \leq M) connects Vertex a_i and Vertex b_i.
  
  An edge whose removal disconnects the graph is called a _bridge_.  
  Find the number of the edges that are bridges among the M edges.
samples: [{"input": "7 7\n    1 3\n    2 7\n    3 4\n    4 5\n    4 6\n    5 6\n    6 7", "output": "4\n    \n\nThe figure below shows the given graph:\n\n![570677a9809fd7a5b63bff11e5d9bf79.png](https://img.atcoder.jp/abc075/570677a9809fd7a5b63bff11e5d9bf79.png)\n\nThe edges shown in red are bridges. There are four of them.\n\n* * *"}, {"input": "3 3\n    1 2\n    1 3\n    2 3", "output": "0\n    \n\nIt is possible that there is no bridge.\n\n* * *"}, {"input": "6 5\n    1 2\n    2 3\n    3 4\n    4 5\n    5 6", "output": "5\n    \n\nIt is possible that every edge is a bridge."}]