c++
//测试链接 https://loj.ac/p/10103
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr int N=10005;
std::vector<int>g[N];
int dfn[N],low[N],tot;
int ans;
int n,m;
void tarjan(int u,bool root){
dfn[u]=low[u]=++tot;
int son=0,cut=0;
for(int v:g[u]){
if(!dfn[v]){
son++;
tarjan(v,false);
low[u]=std::min(low[u],low[v]);
if(low[v]>=dfn[u]&&!root){
cut++;
}
}else{
low[u]=std::min(low[u],dfn[v]);
}
}
ans=std::max(ans,(root?son:cut+1));
}
void fc() {
for(int i=1;i<=n;i++){
g[i].clear();
dfn[i]=low[i]=0;
}
tot=ans=0;
for(int i=0;i<m;i++){
int u,v;std::cin>>u>>v;
++u,++v;
g[u].push_back(v);
g[v].push_back(u);
}
int cnt=0;
for(int i=1;i<=n;i++){
if(!dfn[i]){
cnt++;
tarjan(i,true);
}
}
std::cout<<cnt+ans-1<<"\n";
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
std::cin>>n>>m;
while(n||m){
fc();
std::cin>>n>>m;
}
return 0;
}