#include<bits/stdc++.h>
using namespace std;
int n,m,ans,sum[100005];
struct Node{
int u,v,w;
}a[200005];
struct node{
queue<int>q;
}qwq[100005];
queue<int>q,q1;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>a[i].u>>a[i].v;
}
for(int i=m;i>=1;i--){
if(a[i].u==a[i].v){
a[i].w=qwq[a[i].u].q.size();
}
else{
a[i].w=qwq[a[i].u].q.size()+qwq[a[i].v].q.size();
}
qwq[a[i].u].q.push(i);
qwq[a[i].v].q.push(i);
}
a[m+1]={n+1,n+1,(int)1e9};
for(int i=1;i<=n;i++){
qwq[i].q.push(m+1);
}
for(int i=1;i<=m;i++){
if(a[i].w==0){
q.push(i);
}
}
while(q.size()){
ans++;
while(q.size()){
int x=q.front();
q.pop();
sum[a[x].u]++;
sum[a[x].v]++;
qwq[a[x].u].q.pop();
qwq[a[x].v].q.pop();
a[qwq[a[x].u].q.front()].w-=sum[a[x].u];
if(a[qwq[a[x].u].q.front()].w==0){
q1.push(qwq[a[x].u].q.front());
}
a[qwq[a[x].v].q.front()].w-=sum[a[x].v];
if(a[qwq[a[x].v].q.front()].w==0){
q1.push(qwq[a[x].u].q.front());
}
}
while(q1.size()){
q.push(q1.front());
q1.pop();
}
}
cout<<ans;
return 0;
}