func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   inline void rd(T &x) {     x = 0;     char c = getchar();     int f = 1;     while (!isdigit(c)) {       if (c ==  - ) f = -1;       c = getchar();     }     while (isdigit(c)) x = x * 10 -  0  + c, c = getchar();     x *= f;   }   template <class T>   inline void cmax(T &x, T y) {     if (x < y) x = y;   }   const int N = (1 << 18) + 10;   int f[N][2][2];   int vis[N];   void solve(int l, int r, int c) {     if (l + 1 == r) {       int x = vis[l], y = vis[r];       cmax(f[c][x][y], x | y);       cmax(f[c][y][x], x | y);       return;     }     int mid = l + r >> 1;     solve(l, mid, c << 1), solve(mid + 1, r, c << 1 | 1);     for (int lx = 0; lx < 2; ++lx)       for (int ly = 0; ly < 2; ++ly)         if (f[c << 1][lx][ly] >= 0)           for (int rx = 0; rx < 2; ++rx)             for (int ry = 0; ry < 2; ++ry)               if (f[c << 1 | 1][rx][ry] >= 0) {                 for (int S = 0; S < 8; ++S) {                   int a = (S & 1 ? lx : rx);                   int b = (S & 2 ? ly : ry);                   int d = (S & 4 ? (lx ^ rx ^ a) : b);                   cmax(f[c][a][d], f[c << 1][lx][ly] + f[c << 1 | 1][rx][ry] +                                        (lx | rx) + (ly | ry) +                                        ((lx ^ rx ^ a) | b));                 }               }   }   int main() {     int n, k;     rd(n), rd(k);     for (int i = 1, x; i <= k; ++i) rd(x), vis[x - 1] = 1;     memset(f, -0x3f, sizeof(f));     solve(0, (1 << n) - 1, 1);     int ans = -0x3f3f3f3f;     for (int x = 0; x < 2; ++x)       for (int y = 0; y < 2; ++y) cmax(ans, f[1][x][y] + (x | y));     printf( %d , ans);     return 0;   }   