不是太明白……
#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
int n, m, cnt, uu;
bool a[4500005], vis[4500005];
void dfs(int x){
if(vis[x]) return ;
vis[x] = true;
for(int i=0; i<n; i++)
if(x&(1<<i))
dfs(x^(1<<i));
if(a[x]) dfs((1<<n)-1-x);
}
int main(){
cin>>n>>m;
for(int i=1; i<=m; i++){
scanf("%d", &uu);
a[uu] = true;
}
for(int i=0; i<(1<<n); i++)
if(!vis[i] && a[i]){
cnt++;
dfs((1<<n)-1-i);
}
cout<<cnt<<endl;
return 0;
}