#include <bits/stdc++.h>
bool ex[4194304], v[4194304];
int a[4194305], n, al;
void dfs(int x) {
  if (v[x]) return;
  v[x] = 1;
  if (ex[x]) dfs(al ^ x);
  for (int i = 0; i < n; i++) {
    if (x >> i & 1) dfs(x ^ (1 << i));
  }
}
int main() {
  int m, i, ans;
  scanf("%d%d", &n, &m);
  al = (1 << n) - 1;
  for (i = 1; i <= m; i++) {
    scanf("%d", a + i);
    ex[a[i]] = 1;
  }
  ans = 0;
  for (i = 1; i <= m; i++) {
    if (!v[a[i]]) {
      dfs(al ^ a[i]);
      ans++;
    }
  }
  printf("%d", ans);
}
