#include <bits/stdc++.h>
using namespace std;
const int N = (1 << 22) + 20;
bool vis[2][N];
int a[N], n, m, ex[N];
int get_not(int x) { return (1 << n) - 1 - x; }
void dfs(int type, int msk) {
  vis[type][msk] = true;
  if (type == 1) {
    if (!vis[0][get_not(msk)]) dfs(0, get_not(msk));
    for (int i = 0; i < n; i++)
      if ((!(msk & (1 << i))) && (!vis[1][msk ^ (1 << i)]))
        dfs(1, msk ^ (1 << i));
  } else if (!vis[1][msk] && ex[msk])
    dfs(1, msk);
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> m;
  for (int i = 0; i < m; i++) cin >> a[i], ex[a[i]] = 1;
  int ans = 0;
  for (int i = 0; i < m; i++) {
    if (!vis[0][a[i]]) dfs(0, a[i]), ans++;
  }
  cout << ans;
  return 0;
}
