/* includes */
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
/*__________________________________________*/
/* defines */
#define ll long long
#define ACCEPTED 0
#define fastIO ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
#define all(x) x.begin(), x.end()
#define multihash array<ll, B>
/*__________________________________________*/
/* ordered set */
using namespace std;
using namespace __gnu_pbds;
template <typename T>
using ordered_set = tree<T, null_type, less<>, rb_tree_tag, tree_order_statistics_node_update>;
template <typename t>
using ordered_multiset = tree<t, null_type, less_equal<t>, rb_tree_tag, tree_order_statistics_node_update>;
/*__________________________________________*/
/* constants */
const long long mod = 1e9 + 7;
const long long INF = 1e18;
const ll N = 2e6 + 5;
/*__________________________________________*/
vector<ll> lazySum;
vector<ll> lazySet;
vector<ll> sum;
vector<ll> vec;
ll SQ;
ll n, q;
void build(ll idx)
{
if (lazySet[idx / SQ] == 0 && lazySum[idx / SQ] == 0)
{
return;
}
for (int i = (idx / SQ) * SQ; i < ((idx / SQ) * SQ) + SQ && i < n; i++)
{
if (lazySet[i / SQ] != 0)
{
vec[i] = lazySet[i / SQ];
}
vec[i] += lazySum[i / SQ];
}
lazySet[idx / SQ] = 0;
lazySum[idx / SQ] = 0;
}
signed main()
{
fastIO;
cin >> n >> q;
SQ = sqrt(n) + 2;
vec.resize(n);
lazySum.resize(SQ, 0);
lazySet.resize(SQ, 0);
sum.resize(SQ, 0);
for (ll i = 0; i < n; i++)
{
cin >> vec[i];
sum[i / SQ] += vec[i];
}
while (q--)
{
ll op;
cin >> op;
ll a, b;
cin >> a >> b;
a--, b--;
if (op == 1)
{
ll x;
cin >> x;
if (a % SQ != 0)
{
build(a);
}
build(b);
for (int i = a; i <= b;)
{
if (i % SQ == 0 && i + SQ - 1 <= b)
{
lazySum[i / SQ] += x;
sum[i / SQ] += x * SQ;
i += SQ;
}
else
{
sum[i / SQ] += x;
vec[i] += x;
i++;
}
}
}
else if (op == 2)
{
ll x;
cin >> x;
if (a % SQ != 0)
{
build(a);
}
build(b);
for (int i = a; i <= b;)
{
if (i % SQ == 0 && i + SQ - 1 <= b)
{
lazySum[i / SQ] = 0;
lazySet[i / SQ] = x;
sum[i / SQ] = x * SQ;
i += SQ;
}
else
{
sum[i / SQ] -= vec[i];
vec[i] = x;
sum[i / SQ] += vec[i];
i++;
}
}
}
else
{
ll ans = 0;
if (a % SQ != 0)
{
build(a);
}
build(b);
for (int i = a; i <= b;)
{
if (i % SQ == 0 && i + SQ - 1 <= b)
{
ans += sum[i / SQ];
i += SQ;
}
else
{
ans += vec[i];
i++;
}
}
cout << ans << "\n";
}
}
return ACCEPTED;
}
LyogIGluY2x1ZGVzICAgICovCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgojaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgovKl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyovCgovKiAgZGVmaW5lcyAgICAgKi8KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBBQ0NFUFRFRCAwCiNkZWZpbmUgZmFzdElPIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLCBjaW4udGllKE5VTEwpLCBjb3V0LnRpZShOVUxMKTsKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgbXVsdGloYXNoIGFycmF5PGxsLCBCPgovKl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyovCgovKiAgb3JkZXJlZCBzZXQgICovCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KdXNpbmcgb3JkZXJlZF9zZXQgPSB0cmVlPFQsIG51bGxfdHlwZSwgbGVzczw+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKdGVtcGxhdGUgPHR5cGVuYW1lIHQ+CnVzaW5nIG9yZGVyZWRfbXVsdGlzZXQgPSB0cmVlPHQsIG51bGxfdHlwZSwgbGVzc19lcXVhbDx0PiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47Ci8qX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fKi8KCi8qICBjb25zdGFudHMgICovCmNvbnN0IGxvbmcgbG9uZyBtb2QgPSAxZTkgKyA3Owpjb25zdCBsb25nIGxvbmcgSU5GID0gMWUxODsKY29uc3QgbGwgTiA9IDJlNiArIDU7Ci8qX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fKi8KdmVjdG9yPGxsPiBsYXp5U3VtOwp2ZWN0b3I8bGw+IGxhenlTZXQ7CnZlY3RvcjxsbD4gc3VtOwp2ZWN0b3I8bGw+IHZlYzsKbGwgU1E7CmxsIG4sIHE7CnZvaWQgYnVpbGQobGwgaWR4KQp7CiAgICBpZiAobGF6eVNldFtpZHggLyBTUV0gPT0gMCAmJiBsYXp5U3VtW2lkeCAvIFNRXSA9PSAwKQogICAgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIGZvciAoaW50IGkgPSAoaWR4IC8gU1EpICogU1E7IGkgPCAoKGlkeCAvIFNRKSAqIFNRKSArIFNRICYmIGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgaWYgKGxhenlTZXRbaSAvIFNRXSAhPSAwKQogICAgICAgIHsKICAgICAgICAgICAgdmVjW2ldID0gbGF6eVNldFtpIC8gU1FdOwogICAgICAgIH0KICAgICAgICB2ZWNbaV0gKz0gbGF6eVN1bVtpIC8gU1FdOwogICAgfQogICAgbGF6eVNldFtpZHggLyBTUV0gPSAwOwogICAgbGF6eVN1bVtpZHggLyBTUV0gPSAwOwp9CnNpZ25lZCBtYWluKCkKewogICAgZmFzdElPOwogICAgY2luID4+IG4gPj4gcTsKICAgIFNRID0gc3FydChuKSArIDI7CiAgICB2ZWMucmVzaXplKG4pOwogICAgbGF6eVN1bS5yZXNpemUoU1EsIDApOwogICAgbGF6eVNldC5yZXNpemUoU1EsIDApOwogICAgc3VtLnJlc2l6ZShTUSwgMCk7CgogICAgZm9yIChsbCBpID0gMDsgaSA8IG47IGkrKykKICAgIHsKICAgICAgICBjaW4gPj4gdmVjW2ldOwogICAgICAgIHN1bVtpIC8gU1FdICs9IHZlY1tpXTsKICAgIH0KICAgIHdoaWxlIChxLS0pCiAgICB7CiAgICAgICAgbGwgb3A7CiAgICAgICAgY2luID4+IG9wOwogICAgICAgIGxsIGEsIGI7CiAgICAgICAgY2luID4+IGEgPj4gYjsKICAgICAgICBhLS0sIGItLTsKICAgICAgICBpZiAob3AgPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIGxsIHg7CiAgICAgICAgICAgIGNpbiA+PiB4OwogICAgICAgICAgICBpZiAoYSAlIFNRICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGJ1aWxkKGEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJ1aWxkKGIpOwoKICAgICAgICAgICAgZm9yIChpbnQgaSA9IGE7IGkgPD0gYjspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChpICUgU1EgPT0gMCAmJiBpICsgU1EgLSAxIDw9IGIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbGF6eVN1bVtpIC8gU1FdICs9IHg7CiAgICAgICAgICAgICAgICAgICAgc3VtW2kgLyBTUV0gKz0geCAqIFNROwogICAgICAgICAgICAgICAgICAgIGkgKz0gU1E7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3VtW2kgLyBTUV0gKz0geDsKICAgICAgICAgICAgICAgICAgICB2ZWNbaV0gKz0geDsKICAgICAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAob3AgPT0gMikKICAgICAgICB7CiAgICAgICAgICAgIGxsIHg7CiAgICAgICAgICAgIGNpbiA+PiB4OwogICAgICAgICAgICBpZiAoYSAlIFNRICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGJ1aWxkKGEpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJ1aWxkKGIpOwogICAgICAgICAgICBmb3IgKGludCBpID0gYTsgaSA8PSBiOykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGkgJSBTUSA9PSAwICYmIGkgKyBTUSAtIDEgPD0gYikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBsYXp5U3VtW2kgLyBTUV0gPSAwOwogICAgICAgICAgICAgICAgICAgIGxhenlTZXRbaSAvIFNRXSA9IHg7CiAgICAgICAgICAgICAgICAgICAgc3VtW2kgLyBTUV0gPSB4ICogU1E7CiAgICAgICAgICAgICAgICAgICAgaSArPSBTUTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBzdW1baSAvIFNRXSAtPSB2ZWNbaV07CiAgICAgICAgICAgICAgICAgICAgdmVjW2ldID0geDsKICAgICAgICAgICAgICAgICAgICBzdW1baSAvIFNRXSArPSB2ZWNbaV07CiAgICAgICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGxsIGFucyA9IDA7CiAgICAgICAgICAgIGlmIChhICUgU1EgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYnVpbGQoYSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnVpbGQoYik7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSBhOyBpIDw9IGI7KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoaSAlIFNRID09IDAgJiYgaSArIFNRIC0gMSA8PSBiKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGFucyArPSBzdW1baSAvIFNRXTsKICAgICAgICAgICAgICAgICAgICBpICs9IFNROwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGFucyArPSB2ZWNbaV07CiAgICAgICAgICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvdXQgPDwgYW5zIDw8ICJcbiI7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBBQ0NFUFRFRDsKfQo=