#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
const ll MOD = 998244353;
ll binpow(ll a, ll b) {
  ll res = 1;
  while (b) {
    if (b & 1) res = (res * a) % MOD;
    a = (a * a) % MOD;
    b >>= 1;
  }
  return res;
}
ll modInv(ll a) { return binpow(a, MOD - 2); }
const double PI = acos(-1);
const int INF = 0x3f3f3f3f;
const int NINF = 0x3f3f3f40;
const ll INFLL = 0x3f3f3f3f3f3f3f3f;
const ll NINFLL = 0x3f3f3f3f3f3f3f40;
const int mxN = 17;
const int mxS = 1 << mxN;
int flag[mxS];
int dp[mxN][mxS][2][2];
int n, k;
int main() {
  mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
  cin.tie(0)->sync_with_stdio(0);
  cin >> n >> k;
  if (k == 0) {
    cout << "0\n";
    return 0;
  }
  int a;
  for (int i = (0); i < (k); ++i) {
    cin >> a;
    a--;
    flag[a] = 1;
  }
  for (int i = (0); i < (mxN); ++i)
    for (int j = (0); j < (mxS); ++j)
      for (int l = (0); l < (2); ++l)
        for (int b = (0); b < (2); ++b) dp[i][j][l][b] = -1e9;
  for (int i = (0); i < (1 << (n - 1)); ++i) {
    dp[1][i][flag[2 * i]][flag[2 * i + 1]] = flag[2 * i] | flag[2 * i + 1];
    dp[1][i][flag[2 * i + 1]][flag[2 * i]] = flag[2 * i] | flag[2 * i + 1];
  }
  for (int layer = (2); layer < (n + 1); ++layer) {
    for (int node = (0); node < (1 << (n - layer)); ++node) {
      for (int a = (0); a < (2); ++a)
        for (int b = (0); b < (2); ++b)
          for (int c = (0); c < (2); ++c)
            for (int d = (0); d < (2); ++d) {
              int best = dp[layer - 1][2 * node][a][b] +
                         dp[layer - 1][2 * node + 1][c][d];
              best += (a | c) + (b | d);
              dp[layer][node][a][b] =
                  max(dp[layer][node][a][b], best + (b | c));
              dp[layer][node][a][d] =
                  max(dp[layer][node][a][d], best + (d | c));
              dp[layer][node][c][b] =
                  max(dp[layer][node][c][b], best + (b | a));
              dp[layer][node][c][d] =
                  max(dp[layer][node][c][d], best + (d | a));
            }
    }
  }
  int res = 0;
  for (int i = (0); i < (2); ++i)
    for (int j = (0); j < (2); ++j) {
      res = max(res, dp[n][0][i][j] + (i | j));
    }
  cout << res << "\n";
  return 0;
}
