/*#include<iostream>
#include<string>
#include<vector>
#include<array>
#include<queue>
#include<stack>
#include<algorithm>*/
#include<bits/stdc++.h>
using namespace std;
#define all(x) x.begin(), x.end()
using i64 = long long;
using f64 = double;
using vi = vector<i64>;
constexpr char nl = '\n';
constexpr i64 N = 1e5;
constexpr f64 err = 1e-6;
constexpr int INF = 2e9;
struct Lazy
{
struct Node
{
i64 sum = 0;
int replace = INF;
i64 add = 0;
};
int n;
vector<Node> tree;
Lazy(vector<int> const& v)
{
n = v.size();
tree.resize(4*n);
build(1, 0, n, v);
}
Node Op(Node const& x, Node const& y)
{
return {x.sum + y.sum, INF, 0};
}
#define LC i << 1
#define RC i << 1 | 1
#define MD (l + r) / 2
void build(int i, int l, int r, vector<int> const& v)
{
if(l+1 == r)
{
tree[i].sum = v[l];
return;
}
build(LC, l, MD, v);
build(RC, MD, r, v);
tree[i] = Op(tree[LC], tree[RC]);
}
void push(int i, int l, int r)
{
if(tree[i].replace != INF)
{
tree[LC].sum = 1LL * tree[i].replace * (MD - l);
tree[RC].sum = 1LL * tree[i].replace * (r - MD);
tree[LC].replace = tree[RC].replace = tree[i].replace;
tree[LC].add = tree[RC].add = 0;
tree[i].replace = INF;
}
tree[LC].sum += tree[i].add * (MD - l);
tree[RC].sum += tree[i].add * (r - MD);
tree[LC].add += tree[i].add;
tree[RC].add += tree[i].add;
tree[i].add = 0;
}
void upd(int i, int l, int r, int lo, int hi, int v, bool fl)
{
if(l == lo && r == hi)
{
if(fl)
{
tree[i].sum += 1LL * v * (r - l);
tree[i].add += v;
}
else
{
tree[i].sum = 1LL * v * (r - l);
tree[i].replace = v;
tree[i].add = 0;
}
return;
}
push(i, l, r);
if(hi <= MD)
upd(LC, l, MD, lo, hi, v, fl);
else if(MD <= lo)
upd(RC, MD, r, lo, hi, v, fl);
else
{
upd(LC, l, MD, lo, MD, v, fl);
upd(RC, MD, r, MD, hi, v, fl);
}
tree[i] = Op(tree[LC], tree[RC]);
}
Node ask(int i, int l, int r, int lo, int hi)
{
if(l == lo && r == hi)
return tree[i];
push(i, l, r);
if(hi <= MD)
return ask(LC, l, MD, lo, hi);
else if(MD <= lo)
return ask(RC, MD, r, lo, hi);
return Op(ask(LC, l, MD, lo, MD), ask(RC, MD, r, MD, hi));
}
#undef LC
#undef RC
#undef MD
void upd(int l, int r, int v, bool fl)
{
upd(1, 0, n, l, r, v, fl);
}
i64 ask(int l, int r)
{
return ask(1, 0, n, l, r).sum;
}
};
void solve()
{
int n, q;
cin >> n >> q;
vector<int> v(n);
for(auto&& i : v)
cin >> i;
Lazy tree(v);
while(q--)
{
int t, l, r, x;
cin >> t >> l >> r;
--l, --r;
if(t == 1)
{
cin >> x;
tree.upd(l, r+1, x, true);
}
else if(t == 2)
{
cin >> x;
tree.upd(l, r+1, x, false);
}
else
cout << tree.ask(l, r+1) << nl;
}
}
int main()
{
ios_base::sync_with_stdio(false), cin.tie(nullptr);
int t = 1;
// cin >> t;
for(int i = 1; i <= t; ++i)
{
solve();
}
}
LyojaW5jbHVkZTxpb3N0cmVhbT4KI2luY2x1ZGU8c3RyaW5nPgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPGFycmF5PgojaW5jbHVkZTxxdWV1ZT4KI2luY2x1ZGU8c3RhY2s+CiNpbmNsdWRlPGFsZ29yaXRobT4qLwojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCgp1c2luZyBpNjQgPSBsb25nIGxvbmc7CnVzaW5nIGY2NCA9IGRvdWJsZTsKdXNpbmcgdmkgPSB2ZWN0b3I8aTY0PjsKCmNvbnN0ZXhwciBjaGFyIG5sID0gJ1xuJzsKY29uc3RleHByIGk2NCBOID0gMWU1Owpjb25zdGV4cHIgZjY0IGVyciA9IDFlLTY7CmNvbnN0ZXhwciBpbnQgSU5GID0gMmU5OwoKc3RydWN0IExhenkKewogICAgc3RydWN0IE5vZGUKICAgIHsKICAgICAgICBpNjQgc3VtID0gMDsKICAgICAgICBpbnQgcmVwbGFjZSA9IElORjsKICAgICAgICBpNjQgYWRkID0gMDsKICAgIH07CiAgICAKICAgIGludCBuOwogICAgdmVjdG9yPE5vZGU+IHRyZWU7CiAgICAKICAgIExhenkodmVjdG9yPGludD4gY29uc3QmIHYpCiAgICB7CiAgICAgICAgbiA9IHYuc2l6ZSgpOwogICAgICAgIHRyZWUucmVzaXplKDQqbik7CiAgICAgICAgYnVpbGQoMSwgMCwgbiwgdik7CiAgICB9CiAgICAKICAgIE5vZGUgT3AoTm9kZSBjb25zdCYgeCwgTm9kZSBjb25zdCYgeSkKICAgIHsKICAgICAgICByZXR1cm4ge3guc3VtICsgeS5zdW0sIElORiwgMH07CiAgICB9CiAgICAKICAgICNkZWZpbmUgTEMgaSA8PCAxCiAgICAjZGVmaW5lIFJDIGkgPDwgMSB8IDEKICAgICNkZWZpbmUgTUQgKGwgKyByKSAvIDIKICAgIAogICAgdm9pZCBidWlsZChpbnQgaSwgaW50IGwsIGludCByLCB2ZWN0b3I8aW50PiBjb25zdCYgdikKICAgIHsKICAgICAgICBpZihsKzEgPT0gcikKICAgICAgICB7CiAgICAgICAgICAgIHRyZWVbaV0uc3VtID0gdltsXTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBidWlsZChMQywgbCwgTUQsIHYpOwogICAgICAgIGJ1aWxkKFJDLCBNRCwgciwgdik7CiAgICAgICAgdHJlZVtpXSA9IE9wKHRyZWVbTENdLCB0cmVlW1JDXSk7CiAgICB9CiAgICAKICAgIHZvaWQgcHVzaChpbnQgaSwgaW50IGwsIGludCByKQogICAgewogICAgICAgIGlmKHRyZWVbaV0ucmVwbGFjZSAhPSBJTkYpCiAgICAgICAgewogICAgICAgICAgICB0cmVlW0xDXS5zdW0gPSAxTEwgKiB0cmVlW2ldLnJlcGxhY2UgKiAoTUQgLSBsKTsKICAgICAgICAgICAgdHJlZVtSQ10uc3VtID0gMUxMICogdHJlZVtpXS5yZXBsYWNlICogKHIgLSBNRCk7CiAgICAgICAgICAgIAogICAgICAgICAgICB0cmVlW0xDXS5yZXBsYWNlID0gdHJlZVtSQ10ucmVwbGFjZSA9IHRyZWVbaV0ucmVwbGFjZTsKICAgICAgICAgICAgdHJlZVtMQ10uYWRkID0gdHJlZVtSQ10uYWRkID0gMDsKICAgICAgICAgICAgCiAgICAgICAgICAgIHRyZWVbaV0ucmVwbGFjZSA9IElORjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdHJlZVtMQ10uc3VtICs9IHRyZWVbaV0uYWRkICogKE1EIC0gbCk7CiAgICAgICAgdHJlZVtSQ10uc3VtICs9IHRyZWVbaV0uYWRkICogKHIgLSBNRCk7CiAgICAgICAgCiAgICAgICAgdHJlZVtMQ10uYWRkICs9IHRyZWVbaV0uYWRkOwogICAgICAgIHRyZWVbUkNdLmFkZCArPSB0cmVlW2ldLmFkZDsKICAgICAgICAKICAgICAgICB0cmVlW2ldLmFkZCA9IDA7CiAgICB9CiAgICAKICAgIHZvaWQgdXBkKGludCBpLCBpbnQgbCwgaW50IHIsIGludCBsbywgaW50IGhpLCBpbnQgdiwgYm9vbCBmbCkKICAgIHsKICAgICAgICBpZihsID09IGxvICYmIHIgPT0gaGkpCiAgICAgICAgewogICAgICAgICAgICBpZihmbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHJlZVtpXS5zdW0gKz0gMUxMICogdiAqIChyIC0gbCk7CiAgICAgICAgICAgICAgICB0cmVlW2ldLmFkZCArPSB2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHJlZVtpXS5zdW0gPSAxTEwgKiAgICAgdiAqIChyIC0gbCk7CiAgICAgICAgICAgICAgICB0cmVlW2ldLnJlcGxhY2UgPSB2OwogICAgICAgICAgICAgICAgdHJlZVtpXS5hZGQgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHB1c2goaSwgbCwgcik7CiAgICAgICAgCiAgICAgICAgaWYoaGkgPD0gTUQpCiAgICAgICAgICAgIHVwZChMQywgbCwgIE1ELCBsbywgaGksIHYsIGZsKTsKICAgICAgICBlbHNlIGlmKE1EIDw9IGxvKQogICAgICAgICAgICB1cGQoUkMsIE1ELCByLCBsbywgaGksIHYsIGZsKTsKICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICB1cGQoTEMsIGwsIE1ELCBsbywgTUQsIHYsIGZsKTsKICAgICAgICAgICAgdXBkKFJDLCBNRCwgciwgTUQsIGhpLCB2LCBmbCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRyZWVbaV0gPSBPcCh0cmVlW0xDXSwgdHJlZVtSQ10pOwogICAgfQogICAgCiAgICBOb2RlIGFzayhpbnQgaSwgaW50IGwsIGludCByLCBpbnQgbG8sIGludCBoaSkKICAgIHsKICAgICAgICBpZihsID09IGxvICYmIHIgPT0gaGkpCiAgICAgICAgICAgIHJldHVybiB0cmVlW2ldOwogICAgICAgICAgICAKICAgICAgICBwdXNoKGksIGwsIHIpOwogICAgICAgIAogICAgICAgIGlmKGhpIDw9IE1EKQogICAgICAgICAgICByZXR1cm4gYXNrKExDLCBsLCBNRCwgbG8sIGhpKTsKICAgICAgICBlbHNlIGlmKE1EIDw9IGxvKQogICAgICAgICAgICByZXR1cm4gYXNrKFJDLCBNRCwgciwgbG8sIGhpKTsKICAgICAgICByZXR1cm4gT3AoYXNrKExDLCBsLCBNRCwgbG8sIE1EKSwgYXNrKFJDLCBNRCwgciwgTUQsIGhpKSk7CiAgICB9CiAgICAKICAgICN1bmRlZiBMQwogICAgI3VuZGVmIFJDCiAgICAjdW5kZWYgTUQKICAgIAogICAgdm9pZCB1cGQoaW50IGwsIGludCByLCBpbnQgdiwgYm9vbCBmbCkKICAgIHsKICAgICAgICB1cGQoMSwgMCwgbiwgbCwgciwgdiwgZmwpOwogICAgfQogICAgCiAgICBpNjQgYXNrKGludCBsLCBpbnQgcikKICAgIHsKICAgICAgICByZXR1cm4gYXNrKDEsIDAsIG4sIGwsIHIpLnN1bTsKICAgIH0KfTsKCnZvaWQgc29sdmUoKQp7CiAgICBpbnQgbiwgcTsKICAgIGNpbiA+PiBuID4+IHE7CiAgICAKICAgIHZlY3RvcjxpbnQ+IHYobik7CiAgICBmb3IoYXV0byYmIGkgOiB2KQogICAgICAgIGNpbiA+PiBpOwogICAgICAgIAogICAgTGF6eSB0cmVlKHYpOwogICAgCiAgICB3aGlsZShxLS0pCiAgICB7CiAgICAgICAgaW50IHQsIGwsIHIsIHg7CiAgICAgICAgY2luID4+IHQgPj4gbCA+PiByOwogICAgICAgIC0tbCwgLS1yOwogICAgICAgIAogICAgICAgIGlmKHQgPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIGNpbiA+PiB4OwogICAgICAgICAgICB0cmVlLnVwZChsLCByKzEsIHgsIHRydWUpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmKHQgPT0gMikKICAgICAgICB7CiAgICAgICAgICAgIGNpbiA+PiB4OwogICAgICAgICAgICB0cmVlLnVwZChsLCByKzEsIHgsIGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICBjb3V0IDw8IHRyZWUuYXNrKGwsIHIrMSkgPDwgbmw7CiAgICB9ICAgIAp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLCBjaW4udGllKG51bGxwdHIpOwogICAgCiAgICBpbnQgdCA9IDE7CiAgICAvLyBjaW4gPj4gdDsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gdDsgKytpKQogICAgewogICAgICAgIHNvbHZlKCk7CiAgICB9Cn0=