#include <bits/stdc++.h>
using namespace std;
const int N=603;
int n,m,cnt=1;
int t[38];
set<int>s[43];
struct ed{
int b[38];
}a[38],c;
void to(int x,int y){
for(auto i=s[x].begin();i!=s[x].end();i++){
int tt=*i;
if(s[y].find(tt)==s[y].end()){
s[y].insert(tt);
}
else s[y].erase(tt);
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
a[u].b[v]=1;
a[v].b[u]=1;
}
for(int i=1;i<=n;i++)a[i].b[i]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(!a[i].b[j])continue;
if(!t[j]){
t[j]=i;
s[i].insert(i);
break;
}
else{
for(int k=j;k<=n;k++){
a[i].b[k]^=a[t[j]].b[k];
}
to(t[j],i);
}
}
}
for(int i=1;i<=n;i++){
c.b[i]=1;
}
for(int i=1;i<=n;i++){
if(!c.b[i])continue;
for(int j=i;j<=n;j++){c.b[j]^=a[t[i]].b[j];}
to(t[i],40);
}
printf("%d",s[40].size());
return 0;
}