#include <bits/stdc++.h>
using namespace std;
int a[4199999], n, m, pad;
bool vis[4199999], has[4199999];
void dfs(int x) {
  vis[x] = 1;
  if (has[x]) {
    int rx = (~x) ^ pad;
    if (!vis[rx]) dfs(rx);
  }
  for (int i = 0; i < n; ++i) {
    if ((x >> i) & 1) {
      int nx = x ^ (1 << i);
      if (!vis[nx]) dfs(nx);
    }
  }
}
int main() {
  cin >> n >> m;
  pad = ~((1 << n) - 1);
  for (int i = 0; i < m; ++i) scanf("%d", a + i), has[a[i]] = 1;
  int ans = 0;
  for (int i = 0; i < m; ++i) {
    if (!vis[a[i]]) {
      ans++;
      dfs((~a[i]) ^ pad);
    }
  }
  printf("%d\n", ans);
  return 0;
}
