#include <bits/stdc++.h>
using namespace std;
const int MAXLOG = 22;
const int MAXN = 1 << MAXLOG;
bool has[MAXN];
bool used[2 * MAXN];
int n_log;
int neg(int a) { return (~a) & ((1 << n_log) - 1); }
void dfs(int v) {
  if (used[v]) {
    return;
  }
  used[v] = true;
  if (v < MAXN) {
    dfs(MAXN + v);
    return;
  }
  v -= MAXN;
  int u = neg(v);
  if (has[u]) {
    dfs(u);
  }
  for (int i = 0; i < n_log; ++i) {
    if ((v & (1 << i)) == 0) {
      dfs((v | (1 << i)) + MAXN);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  int m;
  int ans = 0;
  cin >> n_log >> m;
  for (int i = 0; i < m; ++i) {
    int a;
    cin >> a;
    has[a] = true;
  }
  for (int i = 0; i < (1 << n_log); ++i) {
    if (has[i] && !used[i]) {
      ++ans;
      dfs(i);
    }
  }
  cout << ans << endl;
  return 0;
}
