#include<iostream>
#include <string>
#include <cstring>
#include <cstdio>
#define N 100005
using namespace std;
bool v[N];
int a1[N],a2[N];
int n,m,f[N],r[N],d[N];
void init()
{
memset(v, 0 ,sizeof(v));
memset(a1,0,sizeof(a1));
memset(a2,0,sizeof(a2));
for(int i=0 ; i<=n ; i++)
f[i]=i,r[i]=d[i]=0;
}
int find(int k) {
return f[k]=f[k]!=k?find(f[k]):f[k];
}
void union_set(int x , int y)
{
int x1=find(x);int y1=find(y);
if(x1!=y1)
{
if(r[x1]>r[y1]) f[y1]=x1;
else if(r[x1]<r[y1]) f[x1]=y1;
else r[x1]++,f[y1]=x1;
}
}
int main ()
{
//freopen("1.txt","r",stdin);
int i,s,x,y,nt,mt;
while(scanf("%d%d",&n,&m)!=EOF)
{
init();
for(i=0 ; i<m ; i++)
{
scanf("%d%d",&x,&y);
d[x]++,d[y]++;
union_set(x,y);
}//
nt=mt=0;
for(i=1 ; i<=n ; i++)
{
mt=find(i);
if(!v[mt])
{
v[mt]=1;
a1[nt++]=mt;
}
if(d[i]&1) a2[mt]++;
}
//a1保存连通图,a2保存连通图中奇度点的个数
for(s=i=0 ; i<nt ; i++)
{
if(d[a1[i]]==0) continue;
if(a2[a1[i]]==0) s++;
else if(a2[a1[i]]!=0) s+=a2[a1[i]]/2;
}
cout<<s<<endl;
}
return 0;
}
hdoj 3018