def c_bridge(N, M, E):

    # N: 頂点の数, M: 辺の数, E: 辺で結ばれる頂点の組

    def dfs(v):

        is_visited[v] = True  # 現在の頂点を訪問済にする

        for v2 in range(N):

            if not graph[v][v2] or is_visited[v2]:

                continue  # 頂点v2に行けないか、行く必要がない

            dfs(v2)



    graph = [[False for _ in range(N)] for _ in range(N)]

    for a, b in E:

        graph[a - 1][b - 1] = True

        graph[b - 1][a - 1] = True



    # 各辺は橋か？ グラフからその辺を取り除いて、グラフが連結かを判定

    ans = 0

    for a, b in E:

        # 辺を取り除く

        graph[a - 1][b - 1] = False

        graph[b - 1][a - 1] = False



        # すべての辺を未訪問として初期化

        is_visited = [False for _ in range(N)]

        # 頂点0からDFS

        dfs(0)

        # すべての頂点が訪問済なら連結、そうでなければ非連結

        if not all(is_visited):

            ans += 1



        # 辺を復元

        graph[a - 1][b - 1] = True

        graph[b - 1][a - 1] = True

    return ans



N,M = [int(i) for i in input().split()]

E = [[int(i) for i in input().split()] for j in range(M)]

print((c_bridge(N, M, E)))
def c_bridge(N, M, Edges):

    def dfs(v):

        is_visited[v] = True  # 現在の頂点を訪問済にする

        for v2 in range(N):

            if not graph[v][v2] or is_visited[v2]:

                continue  # 頂点v2に行けないか、行く必要がない

            dfs(v2)



    graph = [[False for _ in range(N)] for _ in range(N)]

    for a, b in Edges:

        graph[a - 1][b - 1] = True

        graph[b - 1][a - 1] = True



    # 各辺は橋か？ グラフからその辺を取り除いて、グラフが連結かを判定

    ans = 0

    for a, b in Edges:

        # 辺を取り除く

        graph[a - 1][b - 1] = False

        graph[b - 1][a - 1] = False



        # すべての辺を未訪問として初期化

        is_visited = [False for _ in range(N)]

        # 全頂点に到達できなければ、除いた辺は橋である

        dfs(0)

        ans += 1 if not all(is_visited) else 0



        # 辺を復元

        graph[a - 1][b - 1] = True

        graph[b - 1][a - 1] = True

    return ans



N, M = [int(i) for i in input().split()]

Edges = [[int(i) for i in input().split()] for j in range(M)]

print((c_bridge(N, M, Edges)))
def c_bridge(N, M, E):
    # N: 頂点の数, M: 辺の数, E: 辺で結ばれる頂点の組
    def dfs(v):
        is_visited[v] = True  # 現在の頂点を訪問済にする
        for v2 in range(N):
            if not graph[v][v2] or is_visited[v2]:
                continue  # 頂点v2に行けないか、行く必要がない
            dfs(v2)

    graph = [[False for _ in range(N)] for _ in range(N)]
    for a, b in E:
        graph[a - 1][b - 1] = True
        graph[b - 1][a - 1] = True
    # 各辺は橋か？ グラフからその辺を取り除いて、グラフが連結かを判定
    ans = 0
    for a, b in E:
        # 辺を取り除く
        graph[a - 1][b - 1] = False
        graph[b - 1][a - 1] = False
        # すべての辺を未訪問として初期化
        is_visited = [False for _ in range(N)]
        # 頂点0からDFS
        dfs(0)
        # すべての頂点が訪問済なら連結、そうでなければ非連結
        if not all(is_visited):
            ans += 1
        # 辺を復元
        graph[a - 1][b - 1] = True
        graph[b - 1][a - 1] = True
    return ans


N, M = [int(i) for i in input().split()]
E = [[int(i) for i in input().split()] for j in range(M)]
print((c_bridge(N, M, E)))

def c_bridge(N, M, Edges):
    def dfs(v):
        is_visited[v] = True  # 現在の頂点を訪問済にする
        for v2 in range(N):
            if not graph[v][v2] or is_visited[v2]:
                continue  # 頂点v2に行けないか、行く必要がない
            dfs(v2)

    graph = [[False for _ in range(N)] for _ in range(N)]
    for a, b in Edges:
        graph[a - 1][b - 1] = True
        graph[b - 1][a - 1] = True
    # 各辺は橋か？ グラフからその辺を取り除いて、グラフが連結かを判定
    ans = 0
    for a, b in Edges:
        # 辺を取り除く
        graph[a - 1][b - 1] = False
        graph[b - 1][a - 1] = False
        # すべての辺を未訪問として初期化
        is_visited = [False for _ in range(N)]
        # 全頂点に到達できなければ、除いた辺は橋である
        dfs(0)
        ans += 1 if not all(is_visited) else 0
        # 辺を復元
        graph[a - 1][b - 1] = True
        graph[b - 1][a - 1] = True
    return ans


N, M = [int(i) for i in input().split()]
Edges = [[int(i) for i in input().split()] for j in range(M)]
print((c_bridge(N, M, Edges)))

-def c_bridge(N, M, E): -    # N: 頂点の数, M: 辺の数, E: 辺で結ばれる頂点の組 +def c_bridge(N, M, Edges): -    for a, b in E: +    for a, b in Edges: -    for a, b in E: +    for a, b in Edges: -        # 頂点0からDFS +        # 全頂点に到達できなければ、除いた辺は橋である -        # すべての頂点が訪問済なら連結、そうでなければ非連結 -        if not all(is_visited): -            ans += 1 +        ans += 1 if not all(is_visited) else 0 -E = [[int(i) for i in input().split()] for j in range(M)] -print((c_bridge(N, M, E))) +Edges = [[int(i) for i in input().split()] for j in range(M)] +print((c_bridge(N, M, Edges)))