%%% PoPoQQQ http://blog.csdn.net/popoqqq/article/details/48031135
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
using namespace std;
inline char nc()
{
static char buf[100000],*p1=buf,*p2=buf;
if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; }
return *p1++;
}
inline void read(int &x){
char c=nc(),b=1;
for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;
for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;
}
const int N=200005;
int n,m,cnt,ans;
int deg[N];
bool flag[N],destroy[N];
int fat[N],rank[N];
inline int Fat(int u){
return fat[u]==u?u:fat[u]=Fat(fat[u]);
}
inline void Union(int x,int y){
x=Fat(x); y=Fat(y);
if (x==y) return;
if (rank[x]>rank[y]) swap(x,y);
if(rank[x]==rank[y]) ++rank[y];
fat[x]=y;
}
int main()
{
int x,y;
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
read(n); read(m);
for (int i=1;i<N;i++) fat[i]=i;
for (int i=1;i<=m;i++)
{
read(x); read(y);
if (!x) x=++n;
if (!y) y=++n;
deg[x]++; deg[y]++;
Union(x,y);
}
for (int i=1;i<=n;i++)
{
if(!deg[i]) continue;
if(deg[i]&1)
cnt++,flag[Fat(i)]=1;
if(deg[i]>2)
ans++,destroy[Fat(i)]=1;
}
int itmp=0;
for (int i=1;i<=n;i++)
if(deg[i] && i==Fat(i))
++itmp;
for (int i=1;i<=n;i++)
if(deg[i] && i==Fat(i) && !flag[i] && itmp>1)
{
cnt+=2;
if(!destroy[i]) ans++;
}
ans+=cnt/2;
printf("%d\n",ans);
return 0;
}