#include <bits/stdc++.h>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>
#define ll long long
#define ld long double
#define el "\n"
using namespace __gnu_pbds;
using namespace std;
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
const int N = 2e5 + 5, LOG = 22, mod = 998244353, SQ = 350;
const ld pi = acos(-1);
const ld eps = 1e-4;
int dx[] = {0, -1, 0, 1, -1, 1, -1, 1};
int dy[] = {-1, 0, 1, 0, 1, -1, -1, 1};
int n;
ll a[N];
ll sum[N / SQ + 5], lazy[N / SQ + 5];
bool del[N / SQ + 5];
void build(int buc_num)
{
sum[buc_num] = 0;
for (int i = buc_num * SQ; i < min(buc_num * SQ + SQ, n); i++)
{
if (del[buc_num])
{
a[i] = lazy[i / SQ];
}
else
{
a[i] += lazy[i / SQ];
}
sum[buc_num] += a[i];
}
lazy[buc_num] = 0;
del[buc_num] = 0;
}
void update(int op, int l, int r, int val)
{
build(l / SQ);
build(r / SQ);
for (int i = l; i <= r;)
{
if (i % SQ == 0 && i + SQ - 1 <= r)
{
if (op == 1)
{
lazy[i / SQ] += val;
}
else
{
lazy[i / SQ] = val;
sum[i / SQ] = 0;
del[i / SQ] = 1;
}
i += SQ;
}
else
{
int prv = a[i];
if (op == 1)
{
a[i] += val;
}
else
{
a[i] = val;
}
sum[i / SQ] = sum[i / SQ] - prv + a[i];
i++;
}
}
}
ll query(int l, int r)
{
build(l / SQ);
build(r / SQ);
ll ans = 0;
for (int i = l; i <= r;)
{
if (i % SQ == 0 && i + SQ - 1 <= r)
{
ans += (sum[i / SQ] + lazy[i / SQ] * 1LL * SQ);
i += SQ;
}
else
{
ans += a[i];
i++;
}
}
return ans;
}
void dowork()
{
int q, op, l, r, val;
cin >> n >> q;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 0; i < n; i += SQ)
{
build(i / SQ);
}
while (q--)
{
cin >> op >> l >> r;
l--;
r--;
if (op <=2)
{
cin >> val;
update(op, l, r, val);
}
else
{
cout << query(l, r) << el;
}
}
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int t = 1;
// cin >> t;
for (int i = 1; i <= t; i++)
{
dowork();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGxkIGxvbmcgZG91YmxlCiNkZWZpbmUgZWwgIlxuIgp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp1c2luZyBvcmRlcmVkX3NldCA9IHRyZWU8VCwgbnVsbF90eXBlLCBsZXNzPFQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKCmNvbnN0IGludCBOID0gMmU1ICsgNSwgTE9HID0gMjIsIG1vZCA9IDk5ODI0NDM1MywgU1EgPSAzNTA7CmNvbnN0IGxkIHBpID0gYWNvcygtMSk7CmNvbnN0IGxkIGVwcyA9IDFlLTQ7CmludCBkeFtdID0gezAsIC0xLCAwLCAxLCAtMSwgMSwgLTEsIDF9OwppbnQgZHlbXSA9IHstMSwgMCwgMSwgMCwgMSwgLTEsIC0xLCAxfTsKaW50IG47CmxsIGFbTl07CmxsIHN1bVtOIC8gU1EgKyA1XSwgbGF6eVtOIC8gU1EgKyA1XTsKYm9vbCBkZWxbTiAvIFNRICsgNV07Cgp2b2lkIGJ1aWxkKGludCBidWNfbnVtKQp7CiAgICBzdW1bYnVjX251bV0gPSAwOwogICAgZm9yIChpbnQgaSA9IGJ1Y19udW0gKiBTUTsgaSA8IG1pbihidWNfbnVtICogU1EgKyBTUSwgbik7IGkrKykKICAgIHsKICAgICAgICBpZiAoZGVsW2J1Y19udW1dKQogICAgICAgIHsKICAgICAgICAgICAgYVtpXSA9IGxhenlbaSAvIFNRXTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgYVtpXSArPSBsYXp5W2kgLyBTUV07CiAgICAgICAgfQogICAgICAgIHN1bVtidWNfbnVtXSArPSBhW2ldOwogICAgfQogICAgbGF6eVtidWNfbnVtXSA9IDA7CiAgICBkZWxbYnVjX251bV0gPSAwOwp9Cgp2b2lkIHVwZGF0ZShpbnQgb3AsIGludCBsLCBpbnQgciwgaW50IHZhbCkKewogICAgYnVpbGQobCAvIFNRKTsKICAgIGJ1aWxkKHIgLyBTUSk7CiAgICBmb3IgKGludCBpID0gbDsgaSA8PSByOykKICAgIHsKICAgICAgICBpZiAoaSAlIFNRID09IDAgJiYgaSArIFNRIC0gMSA8PSByKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKG9wID09IDEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGxhenlbaSAvIFNRXSArPSB2YWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsYXp5W2kgLyBTUV0gPSB2YWw7CiAgICAgICAgICAgICAgICBzdW1baSAvIFNRXSA9IDA7CiAgICAgICAgICAgICAgICBkZWxbaSAvIFNRXSA9IDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaSArPSBTUTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaW50IHBydiA9IGFbaV07CiAgICAgICAgICAgIGlmIChvcCA9PSAxKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhW2ldICs9IHZhbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGFbaV0gPSB2YWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3VtW2kgLyBTUV0gPSBzdW1baSAvIFNRXSAtIHBydiArIGFbaV07CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9CiAgICB9Cn0KCmxsIHF1ZXJ5KGludCBsLCBpbnQgcikKewogICAgYnVpbGQobCAvIFNRKTsKICAgIGJ1aWxkKHIgLyBTUSk7CiAgICBsbCBhbnMgPSAwOwogICAgZm9yIChpbnQgaSA9IGw7IGkgPD0gcjspCiAgICB7CiAgICAgICAgaWYgKGkgJSBTUSA9PSAwICYmIGkgKyBTUSAtIDEgPD0gcikKICAgICAgICB7CiAgICAgICAgICAgIGFucyArPSAoc3VtW2kgLyBTUV0gKyBsYXp5W2kgLyBTUV0gKiAxTEwgKiBTUSk7CiAgICAgICAgICAgIGkgKz0gU1E7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGFucyArPSBhW2ldOwogICAgICAgICAgICBpKys7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGFuczsKfQoKdm9pZCBkb3dvcmsoKQp7CiAgICBpbnQgcSwgb3AsIGwsIHIsIHZhbDsKICAgIGNpbiA+PiBuID4+IHE7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSArPSBTUSkKICAgIHsKICAgICAgICBidWlsZChpIC8gU1EpOwogICAgfQogICAgd2hpbGUgKHEtLSkKICAgIHsKICAgICAgICBjaW4gPj4gb3AgPj4gbCA+PiByOwogICAgICAgIGwtLTsKICAgICAgICByLS07CiAgICAgICAgaWYgKG9wIDw9MikKICAgICAgICB7CiAgICAgICAgICAgIGNpbiA+PiB2YWw7CiAgICAgICAgICAgIHVwZGF0ZShvcCwgbCwgciwgdmFsKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgY291dCA8PCBxdWVyeShsLCByKSA8PCBlbDsKICAgICAgICB9CiAgICB9Cn0KCnNpZ25lZCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCiAgICBpbnQgdCA9IDE7CiAgICAvLyBjaW4gPj4gdDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHQ7IGkrKykKICAgIHsKICAgICAgICBkb3dvcmsoKTsKICAgIH0KICAgIHJldHVybiAwOwp9