#include <bits/stdc++.h>
using namespace std;
const int N_MAX = 5e6 + 10;
int N, M;
int arr[N_MAX];
int vis[N_MAX], pass[N_MAX], has[N_MAX];
int cnt;
void dfs(int u, int r) {
  if (r) {
    if (vis[u]) return;
    vis[u] = 1;
    dfs(((1 << N) - 1) ^ u, 0);
  } else {
    if (pass[u]) return;
    pass[u] = 1;
    for (int i = 0; i < N; i++)
      if (u & (1 << i)) dfs(u ^ (1 << i), 0);
    if (has[u]) dfs(u, 1);
  }
}
int main() {
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= M; i++) {
    scanf("%d", arr + i);
    has[arr[i]] = 1;
  }
  cnt = 0;
  for (int i = 0; i < (1 << N); i++) {
    if (has[i] && !vis[i]) {
      cnt++;
      dfs(i, 1);
    }
  }
  printf("%d\n", cnt);
}
