#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, q;
int a[200010], t[200010], t1[200010];
int lowbit(int x) {
return x & (-x);
}
void modify(int x, int num) {
for (; x <= n; x += lowbit(x)) t[x] += num, t1[x] += (x - 1) * num;
}
int query(int x) {
int ret(0);
for (; x; x -= lowbit(x)) ret += x * t[x] - t1[x];
return ret;
}
signed main() {
cin >> n >> q;
int lst = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
modify(i, a[i] - lst);
lst = a[i];
}
while (q--) {
int opt, l, r, k;
cin >> opt;
if (opt == 1) {
cin >> l >> r >> k;
modify(l, k);
modify(r + 1, -k);
}
if (opt == 2) {
cin >> k;
l = 1, r = 1;
modify(l, k);
modify(r + 1, -k);
}
if (opt == 3) {
cin >> k;
l = 1, r = 1;
modify(l, -k);
modify(r + 1, k);
}
if (opt == 4) {
cin >> l >> r;
cout << query(r) - query(l - 1) << endl;
}
if (opt == 5) {
cout << query(1) << endl;
}
}
return 0;
}