#include <bits/stdc++.h>
using namespace std;
long long a[300010], sum[1200010], rev[21], n, q;
void build(long long o, long long lf, long long rg) {
  if (lf == rg) {
    sum[o] = a[lf];
    return;
  }
  long long mid = (lf + rg) >> 1;
  build(o << 1, lf, mid);
  build(o << 1 | 1, mid + 1, rg);
  sum[o] = sum[o << 1] + sum[o << 1 | 1];
}
long long query(long long o, long long lf, long long rg, long long l,
                long long r, long long dep) {
  if (l <= lf && rg <= r) {
    return sum[o];
  }
  long long ans = 0, mid = (lf + rg) >> 1;
  if (rev[dep]) {
    if (l <= mid) {
      ans += query(o << 1 | 1, lf, mid, l, r, dep - 1);
    }
    if (mid < r) {
      ans += query(o << 1, mid + 1, rg, l, r, dep - 1);
    }
  } else {
    if (l <= mid) {
      ans += query(o << 1, lf, mid, l, r, dep - 1);
    }
    if (mid < r) {
      ans += query(o << 1 | 1, mid + 1, rg, l, r, dep - 1);
    }
  }
  return ans;
}
void modify(long long o, long long lf, long long rg, long long w, long long x,
            long long dep) {
  if (lf == rg) {
    sum[o] = x;
    return;
  }
  long long mid = (lf + rg) >> 1;
  if (rev[dep]) {
    if (w <= mid) {
      modify(o << 1 | 1, lf, mid, w, x, dep - 1);
    } else {
      modify(o << 1, mid + 1, rg, w, x, dep - 1);
    }
  } else {
    if (w <= mid) {
      modify(o << 1, lf, mid, w, x, dep - 1);
    } else {
      modify(o << 1 | 1, mid + 1, rg, w, x, dep - 1);
    }
  }
  sum[o] = sum[o << 1] + sum[o << 1 | 1];
}
signed main() {
  cin >> n >> q;
  long long qwq = (1 << n);
  for (long long i = 1; i <= (1 << n); i++) {
    scanf("%lld", &a[i]);
  }
  build(1, 1, qwq);
  for (long long i = 1; i <= q; i++) {
    long long opt, x, y;
    scanf("%lld%lld", &opt, &x);
    if (opt == 1) {
      scanf("%lld", &y);
      modify(1, 1, qwq, x, y, n);
    }
    if (opt == 2) {
      for (long long i = 0; i <= x; i++) {
        rev[i] ^= 1;
      }
    }
    if (opt == 3) {
      rev[x + 1] ^= 1;
    }
    if (opt == 4) {
      scanf("%lld", &y);
      cout << query(1, 1, qwq, x, y, n) << "\n";
    }
  }
}
