#include<bits/stdc++.h>
//designed by marss
#define ll long long
#define ss string
using namespace std;
ll n;
ll m;
vector<ll>adj[100005];
ll vis[100005];
ll dep[100005];
ll dfs(ll u,ll p)
{
ll bt=0;
for(ll v:adj[u])
{
if(v==p)
{
continue;
}
ll d=dfs(v,u)+1;
if(d>bt)
{
bt=d;
}
}
dep[u]=bt;
return bt;
}
ll diam;
ll dfs2(ll u,ll p)
{
ll b1=0;
ll b2=0;
for(ll v:adj[u])
{
if(v==p)
{
continue;
}
ll d=dfs2(v,u)+1;
if(d>=b1)
{
b2=b1;
b1=d;
}
else if(d>b2)
{
b2=d;
}
}
if(b1+b2>diam)
{
diam=b1+b2;
}
return b1;
}
void f()
{
cin>>n>>m;
for(ll i=0;i<m;i++)
{
ll a;
ll b;
cin>>a>>b;
adj[a].push_back(b);
adj[b].push_back(a);
}
fill(vis+1,vis+n+1,0);
ll ans=0;
ll cpm=0;
for(ll i=1;i<=n;i++)
{
if(!vis[i])
{
cpm++;
diam=0;
vector<ll>cp;
queue<ll>q;
q.push(i);
vis[i]=1;
while(!q.empty())
{
ll u=q.front();
q.pop();
cp.push_back(u);
for(ll v:adj[u])
{
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
diam=0;
dfs2(i,-1);
ans+=diam;
}
}
ans+=cpm;
cout<<ans<<endl;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
ll t=1;
while(t--)
{
f();
}
return 0;
}