#include <cstring>
#include <vector>
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define MP(i,j) make_pair(i,j)
#define MAXN 6000

const int MAXM=8000000;
int dfn[MAXN],low[MAXN],st[MAXN],top;
vector < pair< int ,int > > V;

vector < int > E[MAXN],EE[MAXN];

int tp,ans,gedian;

void tarjan(int now,int cnt){
	int part=(cnt>1);
	st[top++]=now;
	dfn[now]=low[now]=cnt;
	for (int ii=E[now].size()-1;ii>=0;--ii){
		int i=E[now][ii];
		if (!dfn[i]){
			tarjan(i,cnt+1);
			low[now]=min(low[now],low[i]);

			if (low[i]>=dfn[now]){
			++part;
				//if (++part==2) keyV.push_back(now);

			
			}			
		
		} else if (dfn[i]!=dfn[now]-1)
			low[now]=min(low[now],dfn[i]);
	}
	V.push_back(MP(part,now));
}

void tarjan2(int now,int cnt){
	int part=(cnt>1);
	st[top++]=now;
	dfn[now]=low[now]=cnt;
	for (int ii=E[now].size()-1;ii>=0;--ii){
		int i=E[now][ii];
		if (dfn[i]==-1) continue;
		if (!dfn[i]){
			tarjan2(i,cnt+1);
			low[now]=min(low[now],low[i]);

			if (low[i]>=dfn[now]){
				++part;
				
				//dummy(A);
			
			}			
		
		} else if (dfn[i]!=dfn[now]-1)
			low[now]=min(low[now],dfn[i]);
	}
	if (part>ans) ans=part;
}

void ArtEdge_ArtVertex_Components(int N,int t){
	memset(dfn,0,sizeof(dfn));
	memset(low,0,sizeof(low));
	
	if (t==1){
		V.clear();
	for (int i=top=0;i<N;++i){
		if (!dfn[i]){
			tp++;
			tarjan(i,1);
		}
	
	}
	}
	if (t==2){
		dfn[gedian]=-1;
	for (int i=top=0;i<N;++i){
		if (!dfn[i]){
			
			tarjan2(i,1);
			}
	
	}		
	}
	

}

int n,m,x,y;

int main(){
	//freopen("2.in","r",stdin);
	while (scanf("%d%d",&n,&m)!=EOF){
		for (int i=0;i<n;i++) E[i].clear();
		for (int i=0;i<m;i++){
			scanf("%d%d",&x,&y);
			E[x].push_back(y);
			E[y].push_back(x);
		}
		tp=0;
		ArtEdge_ArtVertex_Components(n,1);
		sort(V.begin(),V.end());
		//int maxm=V[V.size()-1].first;
		//for (int i=0;i<V.size();i++) printf("%d %d\n",V[i].first,V[i].second);
		//ans=0;
		int ret=0;
		int ca=0;

		for (int i=0;i<V.size();i++)
			{

				gedian=V[i].second;
				ans=0;
				
				ArtEdge_ArtVertex_Components(n,2);

				int t=tp+V[i].first+ans-1-1;
				if (t>ret) ret=t;
			}

		printf("%d\n",ret);
	}
	return 0;
}
