#include<bits/stdc++.h>
using namespace std;
int head[600005],num_edge;
struct Edge
{
int nxt,to;
}edge[600005];
void add_edge (int from,int to)
{
edge[++num_edge].nxt=head[from];
edge[num_edge].to=to;
head[from]=num_edge;
}
int dis[600005],maxn,maxm,ans;
void dfs1(int x,int fa,int sum)
{
if (maxn<sum)
{
maxn=sum;
maxm=x;
}
for (int i=head[x];i;i=edge[i].nxt)
{
int j=edge[i].to;
if (j==fa) continue;
dfs1(j,x,sum+dis[j]-2);
}
}
void dfs2(int x,int fa,int sum)
{
if (ans<sum)
{
ans=sum;
}
for (int i=head[x];i;i=edge[i].nxt)
{
int j=edge[i].to;
if (j==fa) continue;
dfs1(j,x,sum+dis[j]-2);
}
}
int main ()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n,m;
cin>>n>>m;
for (int i=1;i<=n;i++)
{
dis[i]++;
}
for (int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
add_edge(u,v);
add_edge(v,u);
dis[u]++;
dis[v]++;
}
dfs1(1,0,dis[1]);
dfs2(maxm,0,dis[maxm]);
cout<<ans;
return 0;
}