#include <bits/stdc++.h>
using namespace std;
const int MAXN = (1 << 17) + 1000;
const int INF = 1e9;
int n, k, t, a[MAXN], f[18][MAXN][2][2];
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> k;
  for (int i = 1; i <= k; i++) cin >> t, a[t - 1] = 1;
  int bit = 1 << n;
  for (int i = 0; i < 18; i++)
    for (int j = 0; j < MAXN; j++)
      for (int x1 = 0; x1 < 2; x1++)
        for (int x2 = 0; x2 < 2; x2++) f[i][j][x1][x2] = -INF;
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < bit; j += (1 << i)) {
      if (i == 1) {
        for (int x1 = 0; x1 < 2; x1++)
          for (int x2 = 0; x2 < 2; x2++)
            if (x1 + x2 == a[j] + a[j + 1]) f[i][j][x1][x2] = a[j] | a[j + 1];
      } else {
        for (int x1 = 0; x1 < 2; x1++) {
          for (int x2 = 0; x2 < 2; x2++) {
            for (int y1 = 0; y1 < 2; y1++) {
              for (int y2 = 0; y2 < 2; y2++) {
                t = f[i - 1][j][x1][y1] + f[i - 1][j + (1 << (i - 1))][x2][y2] +
                    (x1 | x2) + (y1 | y2);
                f[i][j][x1][y1] = max(f[i][j][x1][y1], t + (y1 | x2));
                f[i][j][x1][y2] = max(f[i][j][x1][y2], t + (y2 | x2));
                f[i][j][x1][x2] = max(f[i][j][x1][x2], t + (x2 | y1));
                f[i][j][x1][x2] = max(f[i][j][x1][x2], t + (x2 | y2));
                f[i][j][x2][y1] = max(f[i][j][x2][y1], t + (y1 | x1));
                f[i][j][x2][y2] = max(f[i][j][x2][y2], t + (y2 | x1));
                f[i][j][x2][x1] = max(f[i][j][x2][x1], t + (x1 | y1));
                f[i][j][x2][x1] = max(f[i][j][x2][x1], t + (x1 | y2));
              }
            }
          }
        }
      }
    }
  }
  int ans = 0;
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 2; j++) ans = max(ans, f[n][0][i][j] + (i | j));
  cout << ans << '\n';
}
