import core.bitop;
import std.algorithm;
import std.ascii;
import std.bigint;
import std.conv;
import std.functional;
import std.format;
import std.math;
import std.numeric;
import std.range;
import std.stdio;
import std.string;
import std.random;
import std.typecons;

alias sread = () => readln.chomp();
alias Point2 = Tuple!(long, "y", long, "x");

T lread(T = long)()
{
    return readln.chomp.to!T();
}

T[] aryread(T = long)()
{
    return readln.split.to!(T[])();
}

void scan(TList...)(ref TList Args)
{
    auto line = readln.split();
    foreach (i, T; TList)
    {
        T val = line[i].to!(T);
        Args[i] = val;
    }
}

void minAssign(T, U = T)(ref T dst, U src)
{
    dst = cast(T) min(dst, src);
}

void maxAssign(T, U = T)(ref T dst, U src)
{
    dst = cast(T) max(dst, src);
}

enum MOD = (10 ^^ 9) + 7;

void main()
{
    long N, M;
    scan(N, M);
    auto G = new long[][](N, N);
    foreach (_; 0 .. M)
    {
        long a, b;
        scan(a, b);
        G[a - 1][b - 1] = G[b - 1][a - 1] = 1;
    }
    // foreach (g; G)
    //     writeln(g);
    auto ID = new long[](N);
    auto L = new long[](N);
    auto visited = new bool[][](N, N);
    ID[] = -1;
    ID[0] = 0;
    L[] = -1;
    L[0] = 0;
    long cnt;
    long id;
    long[] stack = [0];
    loop: while (!stack.empty)
    {
        long x = stack.back;
        // writeln(x);
        // writeln(L, stack);
        foreach (i; 0 .. N)
            if (G[x][i] == 1 && !visited[x][i])
            {
                visited[x][i] = visited[i][x] = true;
                if (ID[i] == -1)
                {
                    ID[i] = L[i] = ++id;
                    stack ~= i;
                }
                L[x] = L[x].min(ID[i]).min(L[i]);

                continue loop;
            }
        stack.popBack();
        // writefln("back: %d-%d %d %d", x, stack.back, L[x], ID[x]);
        if (!stack.empty)
        {
            L[stack.back] = L[stack.back].min(ID[x]).min(L[x]);
            if (L[x] == ID[x])
            {
                cnt++;
            }
        }
    }

    writeln(cnt);
}
