#include<bits/stdc++.h>
#define fi first
#define se second
using namespace std;
using pii = pair<int, int>;
const int M = 22;
const int N = (1 << M);
int a[N + 5], id[N + 5];
bool visited[2 * N + 5];
int n, m, all;
void dfs(int u) {
visited[u] = true;
if (u < n) {
int v = a[u] + n;
if (!visited[v]) dfs(v);
}
else {
int mask = u - n;
for (int id = 0; id < m; id++)
if (!(mask >> id & 1)) {
int v = (mask | (1 << id)) + n;
if (!visited[v]) dfs(v);
}
mask = all - mask;
if(id[mask] != -1) {
int v = id[mask];
if (!visited[v]) dfs(v);
}
}
}
void solve() {
cin >> m >> n;
memset(id, -1, sizeof(id));
for (int i = 0; i < n; i++) {
cin >> a[i];
id[a[i]] = i;
}
all = (1 << m) - 1;
int cpn = 0;
for (int i = 0; i < n; i++)
if (!visited[i]) {
dfs(i);
++cpn;
}
cout << cpn;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
solve();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVzaW5nIHBpaSA9IHBhaXI8aW50LCBpbnQ+OwoKY29uc3QgaW50IE0gPSAyMjsKY29uc3QgaW50IE4gPSAoMSA8PCBNKTsKCmludCBhW04gKyA1XSwgaWRbTiArIDVdOwpib29sIHZpc2l0ZWRbMiAqIE4gKyA1XTsKaW50IG4sIG0sIGFsbDsKCnZvaWQgZGZzKGludCB1KSB7CiAgICB2aXNpdGVkW3VdID0gdHJ1ZTsKCiAgICBpZiAodSA8IG4pIHsKICAgICAgICBpbnQgdiA9IGFbdV0gKyBuOwogICAgICAgIGlmICghdmlzaXRlZFt2XSkgZGZzKHYpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgaW50IG1hc2sgPSB1IC0gbjsKICAgICAgICBmb3IgKGludCBpZCA9IDA7IGlkIDwgbTsgaWQrKykKICAgICAgICAgICAgaWYgKCEobWFzayA+PiBpZCAmIDEpKSB7CiAgICAgICAgICAgICAgICBpbnQgdiA9IChtYXNrIHwgKDEgPDwgaWQpKSArIG47CiAgICAgICAgICAgICAgICBpZiAoIXZpc2l0ZWRbdl0pIGRmcyh2KTsKICAgICAgICAgICAgfQoKICAgICAgICBtYXNrID0gYWxsIC0gbWFzazsKCiAgICAgICAgaWYoaWRbbWFza10gIT0gLTEpIHsKICAgICAgICAgICAgaW50IHYgPSBpZFttYXNrXTsKICAgICAgICAgICAgaWYgKCF2aXNpdGVkW3ZdKSBkZnModik7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHNvbHZlKCkgewogICAgY2luID4+IG0gPj4gbjsKCiAgICBtZW1zZXQoaWQsIC0xLCBzaXplb2YoaWQpKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGNpbiA+PiBhW2ldOwogICAgICAgIGlkW2FbaV1dID0gaTsKICAgIH0KCiAgICBhbGwgPSAoMSA8PCBtKSAtIDE7CgogICAgaW50IGNwbiA9IDA7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgaWYgKCF2aXNpdGVkW2ldKSB7CiAgICAgICAgICAgIGRmcyhpKTsKICAgICAgICAgICAgKytjcG47CiAgICAgICAgfQoKICAgIGNvdXQgPDwgY3BuOwp9CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0K