Skip to content
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;
}