#include <cstdio>
#include <cstring>
bool f[26][26], visit[26][26];
int n, m;
int dfs(int u)
{
int ans = 0, t;
for(int i = 0; i < n; i++) if(f[u][i]&&!visit[u][i])
{
visit[u][i] = visit[i][u] = 1;
t = dfs(i)+1;
ans = ans < t?t:ans;
visit[u][i] = visit[i][u] = 0;
}
return ans;
}
int main ()
{
int a, b;
while(scanf("%d%d", &n,&m)&&m+n)
{
memset(f,false,sizeof(f));
memset(visit,false,sizeof(visit));
for(int i = 0; i < m; i++)
{
scanf("%d%d",&a, &b);
f[a][b] = f[b][a] = 1;
}
int t, max = 0;
for(int i = 0; i < n; i++)
{
t = dfs(i);
max = max < t?t:max;
}
printf("%d\n",max);
}
return 0;
}
学如逆水行舟,不进则退!!=_=!