import java.util.*;
import java.io.*;
import static java.lang.System.*;

class FastScanner {
  private final InputStream in = System.in;
  private final byte[] buffer = new byte[1024];
  private int ptr = 0;
  private int buflen = 0;
  private boolean hasNextByte() {
      if (ptr < buflen) {
          return true;
      }else{
          ptr = 0;
          try {
              buflen = in.read(buffer);
          } catch (IOException e) {
              e.printStackTrace();
          }
          if (buflen <= 0) {
              return false;
          }
      }
      return true;
  }
  private int readByte() { if (hasNextByte()) return buffer[ptr++]; else return -1;}
  private static boolean isPrintableChar(int c) { return 33 <= c && c <= 126;}
  public boolean hasNext() { while(hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++; return hasNextByte();}
  public String next() {
      if (!hasNext()) throw new NoSuchElementException();
      StringBuilder sb = new StringBuilder();
      int b = readByte();
      while(isPrintableChar(b)) {
          sb.appendCodePoint(b);
          b = readByte();
      }
      return sb.toString();
  }
  public long nextLong() {
      if (!hasNext()) throw new NoSuchElementException();
      long n = 0;
      boolean minus = false;
      int b = readByte();
      if (b == '-') {
          minus = true;
          b = readByte();
      }
      if (b < '0' || '9' < b) {
          throw new NumberFormatException();
      }
      while(true){
          if ('0' <= b && b <= '9') {
              n *= 10;
              n += b - '0';
          }else if(b == -1 || !isPrintableChar(b)){
              return minus ? -n : n;
          }else{
              throw new NumberFormatException();
          }
          b = readByte();
      }
  }
  public int nextInt() {
      long nl = nextLong();
      if (nl < Integer.MIN_VALUE || nl > Integer.MAX_VALUE) throw new NumberFormatException();
      return (int) nl;
  }
  public double nextDouble() { return Double.parseDouble(next());}
}

class Main {
  public static final int MOD = 1000000007;
  public static final int INF = 1000000000;
  public static void main(String[] args) {
    FastScanner sc = new FastScanner();
    int N = sc.nextInt();
    int M = sc.nextInt();
    int a[] = new int[M];
    int b[] = new int[M];
    int bridge[][] = new int[N][N];
    for(int i=0; i<M; i++){
      a[i] = sc.nextInt() - 1;
      b[i] = sc.nextInt() - 1;
      bridge[a[i]][b[i]] = 1;
      bridge[b[i]][a[i]] = 1;
    }
    int ans = 0;
    int check[] = new int[N];
    for(int i=0; i<M; i++){
      Arrays.fill(check, -1);
      bridge[a[i]][b[i]] = 0;
      bridge[b[i]][a[i]] = 0;
      Queue<Integer> que = new ArrayDeque<Integer>();
      que.add(0);
      check[0] = 1;
      int cnt = 1;
      while(!que.isEmpty()){
        int tmp = que.poll();
        for(int j=0; j<N; j++){
          if(bridge[tmp][j] == 1 && check[j] == -1){
            que.add(j);
            check[j] = 1;
            cnt++;
          }
        }
      }
      if(cnt != N) ans++;
      bridge[a[i]][b[i]] = 1;
      bridge[b[i]][a[i]] = 1;
    }
    out.println(ans);
  }

  public static int gcd(int a, int b){
    if(b == 0) return a;
    return gcd(b, a%b);
  }
}

Measured memory_bytes: 21844