<pre name="code" class="cpp">#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
#include <fstream>
#include <stdlib.h>
#include <math.h>
using namespace std;
bool map[30][30];
int m,n,route[30],total=0,max_=0;//n is nodes,m is edges
void dps(int cen){
bool exi = false;
for(int i =0;i<n;i++){
if(map[route[cen-1]][i]){
exi = true;
map[route[cen-1]][i] = 0;
map[i][route[cen-1]] = 0;
route[cen] = i;
dps(cen+1);
map[route[cen-1]][i] = 1;
map[i][route[cen-1]] = 1;
}
}
if(exi == false){
if(cen>max_){max_=cen;}
}
}
int main() {
//ifstream cin("ha.txt");
int node1,node2;
while(cin>>n>>m&&n&&m){
memset(map,0,sizeof(map));
for(int i=0;i<m;i++){
cin>>node1>>node2;
map[node1][node2] = 1;
map[node2][node1] = 1;
}
total = 0;
max_ = 0;
for(int i=0;i<n;i++){
route[0] = i;
dps(1);
}
cout<<max_-1<<endl;
}
}