#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN = 1e5 + 7;
ll f[MAXN], n ,m, ans;
vector <int> a[MAXN];
bool mark[MAXN];
void dfs(int u, int p){
mark[u] = 1;
for(auto v : a[u]){
if(!mark[v]) dfs(v, u);
if(v != p) f[u] = max(f[u], f[v] + 1);
}
}
int main(){
ios_base::sync_with_stdio(0);
cout.tie(0);
cin.tie(0);
cin >> n >> m;
for(int i = 1; i <= m; i++){
int x, y;
cin >> x >> y;
a[x].push_back(y);
a[y].push_back(x);
}
dfs(1, -1);
for(int i = 1; i <= n; i++) ans = max(ans, f[i]);
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCmNvbnN0IGludCBNQVhOID0gMWU1ICsgNzsKbGwgZltNQVhOXSwgbiAsbSwgYW5zOwp2ZWN0b3IgPGludD4gYVtNQVhOXTsKYm9vbCBtYXJrW01BWE5dOwp2b2lkIGRmcyhpbnQgdSwgaW50IHApewogICAgbWFya1t1XSA9IDE7CiAgICBmb3IoYXV0byB2IDogYVt1XSl7CiAgICAgICAgaWYoIW1hcmtbdl0pIGRmcyh2LCB1KTsKICAgICAgICBpZih2ICE9IHApIGZbdV0gPSBtYXgoZlt1XSwgZlt2XSArIDEpOwogICAgfQp9CgppbnQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNvdXQudGllKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG07IGkrKyl7CiAgICAgICAgaW50IHgsIHk7CiAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICBhW3hdLnB1c2hfYmFjayh5KTsKICAgICAgICBhW3ldLnB1c2hfYmFjayh4KTsKICAgIH0KICAgIGRmcygxLCAtMSk7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgYW5zID0gbWF4KGFucywgZltpXSk7CiAgICBjb3V0IDw8IGFuczsKfQ==