#include <bits/stdc++.h>
#define ll long long
#define pb push_back
//#define int ll
using namespace std;
const int inf = 1e9;
const ll mod = 1e9 + 7;
const bool T = 0;
ll binpow(ll x, ll sigma){
if(sigma == 0) return 1;
if(sigma%2) return (binpow(x, sigma-1) * x) % mod;
ll gl = binpow(x, sigma/2);
return (gl * gl) % mod;
}
const int N = 111111;
int t[N];
int tmn[N];
int a[N];
int f[N];
void build(int v, int l, int r){
if(l == r){
if(a[l] < 40) t[v] = f[a[l]];
tmn[v] = a[l];
return;
}
t[v] = t[v * 2] + t[v * 2 + 1];
tmn[v] = min(tmn[v * 2], tmn[v * 2 + 1]);
}
void update(int v, int l, int r, int L, int R, int val){
if(l > R || L > r || tmn[v] >= 40) return;
if(l == r){
a[l]++;
if(a[l] <= 40) t[v] = f[a[l]];
else t[v] = 0;
tmn[v] = a[l];
return;
}
t[v] = t[v * 2] + t[v * 2 + 1];
tmn[v] = min(tmn[v * 2], tmn[v * 2 + 1]);
}
void update2(int v, int l, int r, int pos, int val){
if(l == r){
t[v] = val;
return;
}
int mid = (l + r) / 2;
if(mid >= pos){
update2(v * 2, l, mid, pos, val);
} else {
update2(v * 2 + 1, mid + 1, r, pos, val);
}
t[v] = t[v * 2] = t[v * 2 + 1];
}
int get(int v, int l, int r, int L, int R){
if(L > r || l > R) return 0;
if(L <= l && r <= R){
return t[v];
}
int mid = (l + r) / 2;
return get(v * 2, l, mid, L, R) + get(v * 2 + 1, mid + 1, r, L, R);
}
//C:\Users\zaksy\Desktop\Новая папка
int main(){
// freopen("sum2.in", "r", stdin);
// freopen("sum2.out", "w", stdout);
ios_base:: sync_with_stdio(false);
cin.tie(NULL);
int n, q;
cin >> n >> q;
for (int i = 1; i < n; i++){
int type;
int l, r, val;
cin >> l >> r;
if(type == 1){
update2(1, 1, n, l, r);
}
if(type == 2){
cin >> val;
update(1, 1, n, l, r, val);
}
if(type == 3){
cout << get(1, 1, n, l, r) << "\n";
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcGIgcHVzaF9iYWNrCi8vI2RlZmluZSBpbnQgbGwKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IGluZiA9IDFlOTsKY29uc3QgbGwgbW9kID0gMWU5ICsgNzsKY29uc3QgYm9vbCBUID0gMDsKbGwgYmlucG93KGxsIHgsIGxsIHNpZ21hKXsKICAgIGlmKHNpZ21hID09IDApIHJldHVybiAxOwogICAgaWYoc2lnbWElMikgcmV0dXJuIChiaW5wb3coeCwgc2lnbWEtMSkgKiB4KSAlIG1vZDsKICAgIGxsIGdsID0gYmlucG93KHgsIHNpZ21hLzIpOwogICAgcmV0dXJuIChnbCAqIGdsKSAlIG1vZDsKfQpjb25zdCBpbnQgTiA9IDExMTExMTsKaW50IHRbTl07CmludCB0bW5bTl07CmludCBhW05dOwppbnQgZltOXTsKdm9pZCBidWlsZChpbnQgdiwgaW50IGwsIGludCByKXsKCWlmKGwgPT0gcil7CgkJaWYoYVtsXSA8IDQwKSB0W3ZdID0gZlthW2xdXTsKCQl0bW5bdl0gPSBhW2xdOwoJCXJldHVybjsKCX0KCXRbdl0gPSB0W3YgKiAyXSArIHRbdiAqIDIgKyAxXTsKCXRtblt2XSA9IG1pbih0bW5bdiAqIDJdLCB0bW5bdiAqIDIgKyAxXSk7IAp9CQp2b2lkIHVwZGF0ZShpbnQgdiwgaW50IGwsIGludCByLCBpbnQgTCwgaW50IFIsIGludCB2YWwpewoJaWYobCA+IFIgfHwgTCA+IHIgfHwgdG1uW3ZdID49IDQwKSByZXR1cm47CglpZihsID09IHIpewoJCWFbbF0rKzsKCQlpZihhW2xdIDw9IDQwKSB0W3ZdID0gZlthW2xdXTsKCQllbHNlIHRbdl0gPSAwOwoJCXRtblt2XSA9IGFbbF07CgkJcmV0dXJuOwoJfQoJdFt2XSA9IHRbdiAqIDJdICsgdFt2ICogMiArIDFdOwoJdG1uW3ZdID0gbWluKHRtblt2ICogMl0sIHRtblt2ICogMiArIDFdKTsKfQp2b2lkIHVwZGF0ZTIoaW50IHYsIGludCBsLCBpbnQgciwgaW50IHBvcywgaW50IHZhbCl7CglpZihsID09IHIpewoJCXRbdl0gPSB2YWw7CgkJcmV0dXJuOwoJfQoJaW50IG1pZCA9IChsICsgcikgLyAyOwoJaWYobWlkID49IHBvcyl7CgkJdXBkYXRlMih2ICogMiwgbCwgbWlkLCBwb3MsIHZhbCk7Cgl9IGVsc2UgewoJCXVwZGF0ZTIodiAqIDIgKyAxLCBtaWQgKyAxLCByLCBwb3MsIHZhbCk7Cgl9Cgl0W3ZdID0gdFt2ICogMl0gPSB0W3YgKiAyICsgMV07IAp9CmludCBnZXQoaW50IHYsIGludCBsLCBpbnQgciwgaW50IEwsIGludCBSKXsKCWlmKEwgPiByIHx8IGwgPiBSKSByZXR1cm4gMDsKCWlmKEwgPD0gbCAmJiByIDw9IFIpewoJCXJldHVybiB0W3ZdOwoJfQoJaW50IG1pZCA9IChsICsgcikgLyAyOwoJcmV0dXJuIGdldCh2ICogMiwgbCwgbWlkLCBMLCBSKSArIGdldCh2ICogMiArIDEsIG1pZCArIDEsIHIsIEwsIFIpOwp9Ci8vQzpcVXNlcnNcemFrc3lcRGVza3RvcFzQndC+0LLQsNGPINC/0LDQv9C60LAKaW50IG1haW4oKXsKLy8gICAgZnJlb3Blbigic3VtMi5pbiIsICJyIiwgc3RkaW4pOwovLyAgICBmcmVvcGVuKCJzdW0yLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIGlvc19iYXNlOjogc3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7CglpbnQgbiwgcTsKCWNpbiA+PiBuID4+IHE7Cglmb3IgKGludCBpID0gMTsgaSA8IG47IGkrKyl7CgkJaW50IHR5cGU7CgkJaW50IGwsIHIsIHZhbDsKCQljaW4gPj4gbCA+PiByOwoJCWlmKHR5cGUgPT0gMSl7CgkJCXVwZGF0ZTIoMSwgMSwgbiwgbCwgcik7CgkJfQoJCWlmKHR5cGUgPT0gMil7CgkJCWNpbiA+PiB2YWw7CgkJCXVwZGF0ZSgxLCAxLCBuLCBsLCByLCB2YWwpOwoJCX0KCQlpZih0eXBlID09IDMpewoJCQljb3V0IDw8IGdldCgxLCAxLCBuLCBsLCByKSA8PCAiXG4iOwoJCX0KCX0KCXJldHVybiAwOwp9Cg==