#include <bits/stdc++.h>
using namespace std;
const int N = 22;
int n, m, mx;
bool was[1 << N], has[1 << N];
void go(int u, bool flip) {
  if (flip) {
    has[u] = false;
    int v = mx ^ u;
    if (!was[v]) {
      go(v, false);
    }
  } else {
    was[u] = true;
    if (has[u]) {
      go(u, true);
    }
    for (int b = 0; b < n; b++) {
      if (u & (1 << b)) {
        int v = u - (1 << b);
        if (!was[v]) {
          go(v, false);
        }
      }
    }
  }
}
int main() {
  scanf("%d %d", &n, &m);
  mx = (1 << n) - 1;
  for (int i = 0; i < m; i++) {
    int x;
    scanf("%d", &x);
    has[x] = true;
  }
  int ans = 0;
  for (int i = 0; i <= mx; i++) {
    if (has[i]) {
      go(i, true);
      ans++;
    }
  }
  printf("%d\n", ans);
  return 0;
}
