#include<bits/stdc++.h>
using namespace std;
const int nn=10005;
int n,m,vistime[nn],mch[nn],v[nn];
vector<int> edge[nn];
bool dfs(int u,int tag){
if(vistime[u]==tag) return false;
vistime[u]=tag;
for(int i=0;i<edge[u].size();i++){
int v=edge[u][i];
if(mch[v]==0||dfs(mch[v],tag)){
mch[v]=u;
return true;
}
}
return false;
}
inline bool dfs2(int x,int k){
v[x]=k;
for(int i=0;i<edge[x].size();i++){
int y=edge[x][i];
if(!v[y]) dfs2(y,3-k);
}
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;
a++,b++;
edge[a].push_back(b),edge[b].push_back(a);
}
for(int i=1;i<=n;i++){
if(!v[i]) dfs2(i,1);
}
int ans=0;
for(int i=1;i<=n;i++){
if(v[i]==1){
if(dfs(i,i)) ans++;
}
}
cout<<n-ans<<endl;
return 0;
}