#include<bits/stdc++.h>
using namespace std;
const int N=1<<23;
int a[N];
int f[N];
int p[N];
int n,m;
int find(int x){
if(p[x]!=x) p[x]=find(p[x]);
return p[x];
}
int he(int x,int y){
x=find(x);
y=find(y);
p[x]=y;
}
void dfs(int x,int y){
if(!f[x]) return ;
if(find(x)==find(y)) return ;
he(x,y);
for(int i=0;i<n;i++){
if(x&(1<<i))
dfs(x-(1<<i),y);
}
}
int main(){
//freopen("in.txt","r",stdin);
scanf("%d%d",&n,&m);
int tt=(1<<n);
memset(f,0,sizeof f);
for(int i=0;i<m;i++){
scanf("%d",&a[i]);
f[a[i]]=1;
p[a[i]]=a[i];
}
for(int i=0;i<tt;i++){
for(int j=0;j<n;j++){
if(i&(1<<j)){
f[i]|=f[i-(1<<j)];
}
}
}
/*for(int i=0;i<tt;i++){
if(f[i]) cout<<i<<endl;
}*/
for(int i=0;i<m;i++){
dfs(tt-1-a[i],a[i]);
}
int ans=0;
for(int i=0;i<m;i++){
if(p[a[i]]==a[i]) ans++;
}
printf("%d\n",ans);
return 0;
}