#include <bits/stdc++.h>
using namespace std;
template <typename T>
void read(T& x) {
  x = 0;
  int fl = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') fl = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = (x << 1) + (x << 3) + ch - '0';
    ch = getchar();
  }
  x *= fl;
}
template <typename T, typename... Args>
inline void read(T& t, Args&... args) {
  read(t);
  read(args...);
}
const int N = 200005;
int n, k, m;
bool b[N];
int dp[N][20][2][2];
int main() {
  read(m, k);
  for (int i = 1; i <= k; i++) {
    int a;
    read(a);
    b[a] = 1;
  }
  n = 1 << m;
  memset(dp, -0x3f3f3f, sizeof dp);
  for (int i = 1; i <= n; i += 2) {
    if (b[i] && b[i + 1])
      dp[i][1][1][1] = 1;
    else if (b[i] || b[i + 1])
      dp[i][1][1][0] = dp[i][1][0][1] = 1;
    else
      dp[i][1][0][0] = 0;
  }
  for (int j = 2; j <= m; j++) {
    for (int i = 1; i <= n; i += (1 << j)) {
      if (i + (1 << j) - 1 > n) continue;
      for (int f1 = 0; f1 <= 1; f1++) {
        for (int f2 = 0; f2 <= 1; f2++) {
          for (int g1 = 0; g1 <= 1; g1++) {
            for (int g2 = 0; g2 <= 1; g2++) {
              int res =
                  dp[i][j - 1][f1][f2] + dp[i + (1 << (j - 1))][j - 1][g1][g2];
              res += (f1 || g1) + (f2 || g2);
              dp[i][j][f1][f2] = max(dp[i][j][f1][f2], res + (f2 || g1));
              dp[i][j][f1][g1] = max(dp[i][j][f1][g1], res + (f2 || g1));
              dp[i][j][f1][f2] = max(dp[i][j][f1][f2], res + (f2 || g2));
              dp[i][j][f1][g2] = max(dp[i][j][f1][g2], res + (f2 || g2));
              dp[i][j][g1][f1] = max(dp[i][j][g1][f1], res + (f1 || f2));
              dp[i][j][g1][f2] = max(dp[i][j][g1][f2], res + (f1 || f2));
              dp[i][j][g1][f1] = max(dp[i][j][g1][f1], res + (f1 || g2));
              dp[i][j][g1][g2] = max(dp[i][j][g1][g2], res + (f1 || g2));
            }
          }
        }
      }
    }
  }
  printf("%d\n", max(max(dp[1][m][0][0], dp[1][m][1][1] + 1),
                     max(dp[1][m][0][1] + 1, dp[1][m][1][0] + 1)));
  return 0;
}
