#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
using LL = long long;
constexpr int N = 2e5 + 5;
int n, m;
int in[N], d[N];
vector<int> g[N];

void solve() {
    cin >> n >> m;
    for (int i = 1, x, y; i <= m; ++i) {
        cin >> x >> y;
        g[x].emplace_back(y);
        g[y].emplace_back(x);
        in[x]++, in[y]++;
    }
    queue<int> qe;
    for (int i = 1; i <= n; ++i) {
        if (in[i] == 1)qe.emplace(i), d[i] = 1;
    }
    int res = 0;
    while (!qe.empty()) {
        int u = qe.front();
        qe.pop();
        if (in[u])res = max(res, d[u]);
        for (auto v: g[u]) {
            if (--in[v] == 1) {
                qe.emplace(v);
                d[v] = max(d[v], d[u] + 1);
            }
        }
    }
    cout << res << "\n";
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout << fixed << setprecision(15);
    int tt = 1;
    //    cin >> tt;
    while (tt--) solve();
}