#include <bits/stdc++.h>
using namespace std;
void boos() {
  ios_base ::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
}
void file() {
  freopen("max.in", "r", stdin);
  freopen("max.out", "w", stdout);
}
const long long INF = 1e9 + 7;
const long long INF1 = 998244353;
const long long LLINF = (long long)1e18;
const int INTmx = (int)1e9;
const long double EPS = (long double)1e-9;
const int N = 3e5 + 100;
int n, m;
int t[N * 4];
int t1[N * 4];
int t2[N * 4];
long long dp[N * 4][2][2];
int was[N];
void build(int v, int tl, int tr) {
  if (tl + 1 == tr) {
    if (was[tl] && was[tr]) {
      t[v] = 1;
      t1[v] = 1;
    } else if (was[tl] && !was[tr]) {
      t2[v] = 1;
    } else if (!was[tl] && was[tr]) {
      t2[v] = 1;
    }
    return;
  }
  int tm = (tl + tr) / 2;
  build(v + v, tl, tm);
  build(v + v + 1, tm + 1, tr);
  for (int i = 0; i <= 1; i++) {
    for (int j = 0; j <= 1; j++) {
      dp[v][i][j] = -INF;
    }
  }
  if (tr - tl + 1 == 4) {
    int ans = 0;
    if (t[v + v] + t[v + v + 1] >= 1) {
      dp[v][1][1] = 0;
      if (t[v + v] + t2[v + v]) dp[v][1][1]++;
      if (t[v + v + 1] + t2[v + v + 1]) dp[v][1][1]++;
      dp[v][1][1] += 3;
      t[v] = 1;
      t1[v] = 1;
      t2[v] = 0;
    }
    if (t2[v + v] + t2[v + v + 1] == 2) {
      dp[v][1][1] = 5;
      t[v] = 1;
      t1[v] = 1;
    }
    if (t2[v + v] + t2[v + v + 1] == 1) {
      dp[v][0][1] = 3;
      dp[v][1][0] = 2;
    }
    if (t[v + v] + t[v + v + 1] + t2[v + v] + t2[v + v + 1] == 0)
      dp[v][0][0] = 0;
    return;
  }
  dp[v][1][1] = dp[v + v][1][1] +
                max(dp[v + v + 1][1][1],
                    max(dp[v + v + 1][0][1],
                        max(dp[v + v + 1][1][0], dp[v + v + 1][0][0]))) +
                3;
  dp[v][1][1] =
      max(dp[v][1][1],
          dp[v + v + 1][1][1] +
              max(dp[v + v][0][1], max(dp[v + v][1][0], dp[v + v][0][0])) + 3);
  dp[v][1][1] = max(
      dp[v][1][1],
      dp[v + v][1][0] + max(dp[v + v + 1][1][0] + 2, dp[v + v + 1][0][1] + 3));
  dp[v][1][1] = max(dp[v][1][1], dp[v + v + 1][1][0] + dp[v + v][0][1] + 3);
  dp[v][1][0] = max(dp[v + v][1][0] + dp[v + v + 1][0][0] + 1,
                    dp[v + v + 1][1][0] + dp[v + v][0][0] + 1);
  dp[v][0][1] = max(dp[v + v][1][0] + dp[v + v + 1][0][0] + 2,
                    dp[v + v + 1][1][0] + dp[v + v][0][0] + 2);
  dp[v][0][1] = max(dp[v + v][0][1] + dp[v + v + 1][0][1] + 2,
                    max(dp[v + v][0][0] + dp[v + v + 1][0][1] + 2,
                        dp[v + v + 1][0][0] + dp[v + v][0][1] + 2));
  dp[v][0][0] = dp[v + v][0][0] + dp[v + v + 1][0][0];
  for (int i = 0; i <= 1; i++) {
    for (int j = 0; j <= 1; j++) {
      dp[v][i][j] = max(-INF, dp[v][i][j]);
    }
  }
}
int main() {
  boos();
  int k;
  cin >> n >> k;
  for (int i = 1; i <= k; i++) {
    int x;
    cin >> x;
    was[x]++;
  }
  if (n == 1) {
    cout << (bool)k << "\n";
    return 0;
  }
  int m = (1 << n);
  build(1, 1, m);
  cout << max(max(dp[1][1][0], max(dp[1][0][1], dp[1][1][1])) + 1, dp[1][0][0]);
}
