#include <bits/stdc++.h>
using namespace std;
vector<set<int> > graph;
vector<int> eliminar;
set<int>::iterator ite;
void elim(int N) {
  eliminar.clear();
  for (int i = 1; i <= N; i++)
    if (graph[i].size() == 1) eliminar.push_back(i);
}
int main() {
  int n, m, n1, n2, temp, contador;
  cin >> n >> m;
  contador = 0;
  graph.resize(n + 10);
  while (m--) {
    cin >> n1 >> n2;
    graph[n1].insert(n2);
    graph[n2].insert(n1);
  }
  elim(n);
  while (!eliminar.empty()) {
    for (int i = 0; i < eliminar.size(); i++) {
      graph[eliminar[i]].clear();
      for (int j = 1; j <= n; j++)
        if (graph[j].find(eliminar[i]) != graph[j].end())
          graph[j].erase(eliminar[i]);
    }
    contador++;
    elim(n);
  }
  cout << contador << endl;
}
