#include <bits/stdc++.h>
using namespace std;
bool Adj[1005][1005];
int Cnt[1005];
void Edge(int A, int B) {
  Adj[A][B] = 1;
  Adj[B][A] = 1;
  Cnt[A]++, Cnt[B]++;
}
int main() {
  memset(Adj, 0, sizeof(Adj));
  memset(Cnt, 0, sizeof(Cnt));
  int N, M;
  scanf("%d", &N);
  scanf("%d", &M);
  for (int i = 0; i < M; i++) {
    int A, B;
    scanf("%d", &A);
    scanf("%d", &B);
    Edge(A, B);
  }
  int Ans = 0;
  bool cont = 1;
  while (cont) {
    cont = 0;
    vector<int> mf;
    mf.empty();
    for (int i = 1; i <= N; i++) {
      if (Cnt[i] == 1) {
        cont = 1;
        Cnt[i] = 0;
        for (int j = 1; j <= N; j++)
          if (Adj[i][j]) {
            Adj[j][i] = 0;
            mf.push_back(j);
            break;
          }
      }
    }
    if (cont) {
      Ans++;
      for (int i = 0; i < mf.size(); i++) Cnt[mf[i]]--;
    }
  }
  printf("%d", Ans);
}
