#include <bits/stdc++.h>
using namespace std;
vector<long long int> used((1 << 22) + 5), vis((1 << 22) + 5, 0);
long long n, m, x, ans = 0;
void dfs(long long node) {
  if (vis[node]) return;
  vis[node] = 1;
  for (long long int i = 0; i < n; i++)
    if ((node >> i) & 1) dfs(node - (1 << i));
  if (used[node]) dfs((1 << n) - node - 1);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int TESTS = 1;
  while (TESTS--) {
    cin >> n >> m;
    for (long long int i = 1; i < m + 1; i++) {
      long long x;
      cin >> x;
      used[x] = 1;
    }
    for (long long int i = 0; i < (1 << n); i++)
      if (!vis[i] && used[i]) dfs((1 << n) - i - 1), ans++;
    cout << ans;
  }
  return 0;
}
