#include <bits/stdc++.h>
using namespace std;
const int maxn = 22;
bool vis1[1 << maxn], vis2[1 << maxn], has[1 << maxn];
int a[1 << maxn];
void dfs1(int);
void dfs2(int);
int n, m;
void dfs1(int u) {
  vis1[u] = true;
  if (has[u] && !vis2[u]) dfs2(u);
  for (int i = 0; i < n; i++) {
    if (u & (1 << i)) {
      int v = u ^ (1 << i);
      if (!vis1[v]) dfs1(v);
    }
  }
}
void dfs2(int u) {
  vis2[u] = true;
  dfs1(u ^ ((1 << n) - 1));
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    scanf("%d", &a[i]);
    has[a[i]] = true;
  }
  int cnt = 0;
  for (int i = 0; i < m; i++) {
    if (!vis2[a[i]]) {
      cnt++;
      dfs2(a[i]);
    }
  }
  printf("%d\n", cnt);
}
