/// slt by muoii
/// vn.spoj.com/problems/SAFENET2/
#include <bits/stdc++.h>
using namespace std;
#define tag "spoj"
#define maxn 1007
#define maxc 207
#define oo 1000000007
#define mid ((l+r)>>1)
#define meset(a,x) memset(a,x,sizeof(a))
#define loop(x) for(int LoOpEr=x;LoOpEr-->0;)
///>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
int ans;
int numbering;
int n,m;
vector< vector<int> > adj;
vector<int> num,low;
vector<int> par;
stack<int> stak;
/// par[v]=u: cut[u]=true <-> nchild(u)>=2 || num[u]<=low[v]
void slt(const int &u,const int &parent)
{
par[u]=parent;
num[u]=++numbering;
low[u]=oo;
for(const int &v: adj[u])
if(par[v]<0)
{
stak.push(v);
slt(v,u);
low[u]=min(low[u],low[v]);
if(num[u]<=low[v])
{
int cnt=1;
while(stak.top()!=v) ++cnt,stak.pop();
++cnt,stak.pop();
ans=max(ans,cnt);
}
}
else if(v!=parent) low[u]=min(low[u],num[v]);
if(num[u]==numbering) ans=max(ans,1);
}
int main()
{
#ifdef dmdd
freopen(tag".inp","r",stdin); freopen(tag".out","w",stdout);
#endif // dmdd
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>m;
///load graph:
adj.resize(n+1);par.resize(n+1,-1);num.resize(n+1);low.resize(n+1);
int x,y;
while(m-->0) cin>>x>>y,adj[x].push_back(y),adj[y].push_back(x);
///find answer:
for(int i=1;i<=n;i++)
if(par[i]<0)
slt(i,0);
cout<<ans;
return 0;
}
Ly8vIHNsdCBieSBtdW9paQovLy8gdm4uc3Bvai5jb20vcHJvYmxlbXMvU0FGRU5FVDIvCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIHRhZyAic3BvaiIKI2RlZmluZSBtYXhuIDEwMDcKI2RlZmluZSBtYXhjIDIwNwojZGVmaW5lIG9vIDEwMDAwMDAwMDcKI2RlZmluZSBtaWQgKChsK3IpPj4xKQojZGVmaW5lIG1lc2V0KGEseCkgbWVtc2V0KGEseCxzaXplb2YoYSkpCiNkZWZpbmUgbG9vcCh4KSBmb3IoaW50IExvT3BFcj14O0xvT3BFci0tPjA7KQovLy8+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+CmludCBhbnM7CmludCBudW1iZXJpbmc7CmludCBuLG07CnZlY3RvcjwgdmVjdG9yPGludD4gPiBhZGo7CnZlY3RvcjxpbnQ+IG51bSxsb3c7CnZlY3RvcjxpbnQ+IHBhcjsKc3RhY2s8aW50PiBzdGFrOwoKLy8vIHBhclt2XT11OiAgIGN1dFt1XT10cnVlIDwtPiAgbmNoaWxkKHUpPj0yIHx8IG51bVt1XTw9bG93W3ZdCgp2b2lkIHNsdChjb25zdCBpbnQgJnUsY29uc3QgaW50ICZwYXJlbnQpCnsKICAgIHBhclt1XT1wYXJlbnQ7CiAgICBudW1bdV09KytudW1iZXJpbmc7CiAgICBsb3dbdV09b287CgogICAgZm9yKGNvbnN0IGludCAmdjogYWRqW3VdKQogICAgICAgIGlmKHBhclt2XTwwKQogICAgICAgIHsKICAgICAgICAgICAgc3Rhay5wdXNoKHYpOwogICAgICAgICAgICBzbHQodix1KTsKICAgICAgICAgICAgbG93W3VdPW1pbihsb3dbdV0sbG93W3ZdKTsKCiAgICAgICAgICAgIGlmKG51bVt1XTw9bG93W3ZdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgY250PTE7CiAgICAgICAgICAgICAgICB3aGlsZShzdGFrLnRvcCgpIT12KSArK2NudCxzdGFrLnBvcCgpOwogICAgICAgICAgICAgICAgKytjbnQsc3Rhay5wb3AoKTsKCiAgICAgICAgICAgICAgICBhbnM9bWF4KGFucyxjbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYodiE9cGFyZW50KSBsb3dbdV09bWluKGxvd1t1XSxudW1bdl0pOwoKICAgIGlmKG51bVt1XT09bnVtYmVyaW5nKSBhbnM9bWF4KGFucywxKTsKfQppbnQgbWFpbigpCnsKICAgICNpZmRlZiBkbWRkCiAgICBmcmVvcGVuKHRhZyIuaW5wIiwiciIsc3RkaW4pOyBmcmVvcGVuKHRhZyIub3V0IiwidyIsc3Rkb3V0KTsKICAgICNlbmRpZiAvLyBkbWRkCiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGNpbj4+bj4+bTsKCiAgICAvLy9sb2FkIGdyYXBoOgogICAgYWRqLnJlc2l6ZShuKzEpO3Bhci5yZXNpemUobisxLC0xKTtudW0ucmVzaXplKG4rMSk7bG93LnJlc2l6ZShuKzEpOwogICAgaW50IHgseTsKICAgIHdoaWxlKG0tLT4wKSBjaW4+Png+PnksYWRqW3hdLnB1c2hfYmFjayh5KSxhZGpbeV0ucHVzaF9iYWNrKHgpOwoKICAgIC8vL2ZpbmQgYW5zd2VyOgogICAgZm9yKGludCBpPTE7aTw9bjtpKyspCiAgICAgICAgaWYocGFyW2ldPDApCiAgICAgICAgICAgIHNsdChpLDApOwoKICAgIGNvdXQ8PGFuczsKCiAgICByZXR1cm4gMDsKfQo=