/*
一次AC,简单题
纠错经历:
①处需要正反标记
题意:每一条边只能走一次,求最长线。
思路:回溯
*/
#include <cstdio>
#include <cstring>
int n,m;
bool G[30][30],visit[30][30];
int ans;
void dfs(int cur,int count)
{
bool ok=false;
for(int i=0;i<n;i++)
if(G[cur][i] && !visit[cur][i])
{
ok=true;
visit[cur][i]=1;
visit[i][cur]=1;//①
dfs(i,count+1);
visit[cur][i]=0;
visit[i][cur]=0;
}
if(!ok)
{
if(count>ans)
ans=count;
}
}
int main()
{
//freopen("data.in","r",stdin);
while(scanf("%d %d",&n,&m) && n && m)
{
memset(G,0,sizeof(G));
memset(visit,0,sizeof(visit));
for(int i=0;i<m;i++)
{
int a,b;
scanf("%d %d",&a,&b);
G[a][b]=G[b][a]=1;
}
ans=0;
for(int i=0;i<n;i++)
dfs(i,0);
printf("%d\n",ans);
}
return 0;
}