#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vll;
#define pb push_back
#define ff first
#define ss second
const int N = 512 * 1024;
const ll mod = 1e9 + 9;
const ll X = 13371337;
ll tab[N];
ll potega(ll a, ll b) {
ll wyn = 1;
a %= mod;
while(b){
if(b & 1) wyn = (wyn * a) % mod;
a = (a * a) % mod;
b >>= 1;
}
return wyn;
}
struct node{
ll h;
ll mn1, cnt, mn2;
ll lazy_ustaw, lazy_add;
};
node seg[2 * N];
void apply(int v){
seg[v].h = (seg[2 * v].h + seg[2 * v + 1].h) % mod;
if(seg[2 * v].mn1 == seg[2 * v + 1].mn1){
seg[v].cnt = seg[2 * v].cnt + seg[2 * v + 1].cnt;
seg[v].mn1 = seg[2 * v].mn1;
seg[v].mn2 = min(seg[2 * v].mn2, seg[2 * v + 1].mn2);
}else if(seg[2 * v].mn1 < seg[2 * v + 1].mn1){
seg[v].mn1 = seg[2 * v].mn1;
seg[v].cnt = seg[2 * v].cnt;
seg[v].mn2 = min(seg[2 * v].mn2, seg[2 * v + 1].mn1);
}else{
seg[v].mn1 = seg[2 * v + 1].mn1;
seg[v].cnt = seg[2 * v + 1].cnt;
seg[v].mn2 = min(seg[2 * v + 1].mn2, seg[2 * v].mn1);
}
}
void ustaw(int v, int l, int r, ll val){
if(val == 0) return;
ll dl = r - l + 1;
seg[v].h = (dl * potega(X, val)) % mod;
seg[v].mn1 = val;
seg[v].mn2 = 2e18;
seg[v].cnt = dl;
seg[v].lazy_ustaw = val;
seg[v].lazy_add = 0;
}
void dodaj(int v, int l, int r, ll val){
if(val == 0) return;
if(seg[v].lazy_ustaw){
ustaw(v, l, r, val + seg[v].lazy_ustaw);
return;
}
seg[v].h = (seg[v].h * potega(X, val)) % mod;
seg[v].mn1 += val;
if(seg[v].mn2 != 2e18) seg[v].mn2 += val;
seg[v].lazy_add += val;
}
void maxuj(int v, int l, int r, ll val){
if(val <= seg[v].mn1) return;
ll stary_hash_min = (seg[v].cnt * potega(X, seg[v].mn1)) % mod;
ll nowy_hash_min = (seg[v].cnt * potega(X, val)) % mod;
seg[v].h = (seg[v].h - stary_hash_min + nowy_hash_min + mod) % mod;
seg[v].mn1 = val;
if(seg[v].lazy_ustaw != 0) seg[v].lazy_ustaw = max(val, seg[v].lazy_ustaw);
}
void push(int v, int l, int r){
if(l == r) return;
int mid = (l + r) / 2;
if(seg[v].lazy_ustaw != 0){
ustaw(2 * v, l, mid, seg[v].lazy_ustaw);
ustaw(2 * v + 1, mid + 1, r, seg[v].lazy_ustaw);
seg[v].lazy_ustaw = 0;
}
if(seg[v].lazy_add != 0){
dodaj(2 * v, l, mid, seg[v].lazy_add);
dodaj(2 * v + 1, mid + 1, r, seg[v].lazy_add);
seg[v].lazy_add = 0;
}
if(seg[2 * v].mn1 < seg[v].mn1) maxuj(2 * v, l, mid, seg[v].mn1);
if(seg[2 * v + 1].mn1 < seg[v].mn1) maxuj(2 * v + 1, mid + 1, r, seg[v].mn1);
}
void build(int v, int l, int r){
if(l == r){
seg[v].h = potega(X, tab[l]);
seg[v].mn1 = tab[l];
seg[v].cnt = 1;
seg[v].mn2 = 2e18;
seg[v].lazy_ustaw = 0;
seg[v].lazy_add = 0;
return;
}
int mid = (l + r) / 2;
build(2 * v, l, mid);
build(2 * v + 1, mid + 1, r);
apply(v);
}
void upd_dod(int v, int l, int r, int ql, int qr, ll val){
if(ql > qr || qr < l || ql > r) return;
if(ql <= l && r <= qr){
dodaj(v, l, r, val);
return;
}
push(v, l, r);
int mid = (l + r) / 2;
upd_dod(2 * v, l, mid, ql, qr, val);
upd_dod(2 * v + 1, mid + 1, r, ql, qr, val);
apply(v);
}
void upd_ustaw(int v, int l, int r, int ql, int qr, ll val){
if(ql > qr || qr < l || ql > r) return;
if(ql <= l && r <= qr){
ustaw(v, l, r, val);
return;
}
push(v, l, r);
int mid = (l + r) / 2;
upd_ustaw(2 * v, l, mid, ql, qr, val);
upd_ustaw(2 * v + 1, mid + 1, r, ql, qr, val);
apply(v);
}
void upd_mx(int v, int l, int r, int ql, int qr, ll val){
if(ql > qr || qr < l || ql > r) return;
if(val <= seg[v].mn1) return;
if(ql <= l && r <= qr && seg[v].mn2 > val){
maxuj(v, l, r, val);
return;
}
push(v, l, r);
int mid = (l + r) / 2;
upd_mx(2 * v, l, mid, ql, qr, val);
upd_mx(2 * v + 1, mid + 1, r, ql, qr, val);
apply(v);
}
ll query(int v, int l, int r, int ql, int qr){
if(ql > qr || qr < l || ql > r){
return 0;
}
if(ql <= l && r <= qr){
return seg[v].h;
}
push(v, l, r);
int mid = (l + r) / 2;
ll lewy = query(2 * v, l, mid, ql, qr);
ll prawy = query(2 * v + 1, mid + 1, r, ql, qr);
return (lewy + prawy) % mod;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, q;
cin >> n >> q;
for(int i = 1; i <= n; i++) cin >> tab[i];
build(1, 1, n);
while(q--){
int typ; cin >> typ;
if(typ == 1){
int l, r; ll k;
cin >> l >> r >> k;
upd_ustaw(1, 1, n, l, r, k);
}else if(typ == 2){
int l, r; ll k;
cin >> l >> r >> k;
upd_dod(1, 1, n, l, r, k);
}else if(typ == 3){
int l, r; ll k;
cin >> l >> r >> k;
upd_mx(1, 1, n, l, r, k);
}else{
int l1, r1, l2, r2;
cin >> l1 >> r1 >> l2 >> r2;
if(query(1, 1, n, l1, r1) == query(1, 1, n, l2, r2)) cout << "TAK\n";
else cout << "NIE\n";
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwp0eXBlZGVmIHBhaXI8bGwsIGxsPiBwbGw7CnR5cGVkZWYgdmVjdG9yPGludD4gdmk7CnR5cGVkZWYgdmVjdG9yPGxsPiB2bGw7CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgZmYgZmlyc3QKI2RlZmluZSBzcyBzZWNvbmQKCmNvbnN0IGludCBOID0gNTEyICogMTAyNDsKY29uc3QgbGwgbW9kID0gMWU5ICsgOTsKY29uc3QgbGwgWCA9IDEzMzcxMzM3OwoKbGwgdGFiW05dOwoKbGwgcG90ZWdhKGxsIGEsIGxsIGIpIHsKICAgIGxsIHd5biA9IDE7CiAgICBhICU9IG1vZDsKICAgIHdoaWxlKGIpewogICAgICAgIGlmKGIgJiAxKSB3eW4gPSAod3luICogYSkgJSBtb2Q7CiAgICAgICAgYSA9IChhICogYSkgJSBtb2Q7CiAgICAgICAgYiA+Pj0gMTsKICAgIH0KICAgIHJldHVybiB3eW47Cn0KCnN0cnVjdCBub2RlewogICAgbGwgaDsKICAgIGxsIG1uMSwgY250LCBtbjI7CiAgICBsbCBsYXp5X3VzdGF3LCBsYXp5X2FkZDsKfTsKCm5vZGUgc2VnWzIgKiBOXTsKCnZvaWQgYXBwbHkoaW50IHYpewogICAgc2VnW3ZdLmggPSAoc2VnWzIgKiB2XS5oICsgc2VnWzIgKiB2ICsgMV0uaCkgJSBtb2Q7CiAgICAKICAgIGlmKHNlZ1syICogdl0ubW4xID09IHNlZ1syICogdiArIDFdLm1uMSl7CiAgICAgICAgc2VnW3ZdLmNudCA9IHNlZ1syICogdl0uY250ICsgc2VnWzIgKiB2ICsgMV0uY250OwogICAgICAgIHNlZ1t2XS5tbjEgPSBzZWdbMiAqIHZdLm1uMTsKICAgICAgICBzZWdbdl0ubW4yID0gbWluKHNlZ1syICogdl0ubW4yLCBzZWdbMiAqIHYgKyAxXS5tbjIpOwogICAgfWVsc2UgaWYoc2VnWzIgKiB2XS5tbjEgPCBzZWdbMiAqIHYgKyAxXS5tbjEpewogICAgICAgIHNlZ1t2XS5tbjEgPSBzZWdbMiAqIHZdLm1uMTsgCiAgICAgICAgc2VnW3ZdLmNudCA9IHNlZ1syICogdl0uY250OwogICAgICAgIHNlZ1t2XS5tbjIgPSBtaW4oc2VnWzIgKiB2XS5tbjIsIHNlZ1syICogdiArIDFdLm1uMSk7CiAgICB9ZWxzZXsKICAgICAgICBzZWdbdl0ubW4xID0gc2VnWzIgKiB2ICsgMV0ubW4xOyAKICAgICAgICBzZWdbdl0uY250ID0gc2VnWzIgKiB2ICsgMV0uY250OwogICAgICAgIHNlZ1t2XS5tbjIgPSBtaW4oc2VnWzIgKiB2ICsgMV0ubW4yLCBzZWdbMiAqIHZdLm1uMSk7CiAgICB9Cn0KCnZvaWQgdXN0YXcoaW50IHYsIGludCBsLCBpbnQgciwgbGwgdmFsKXsKICAgIGlmKHZhbCA9PSAwKSByZXR1cm47CiAgICAKICAgIGxsIGRsID0gciAtIGwgKyAxOwogICAgc2VnW3ZdLmggPSAoZGwgKiBwb3RlZ2EoWCwgdmFsKSkgJSBtb2Q7CiAgICBzZWdbdl0ubW4xID0gdmFsOwogICAgc2VnW3ZdLm1uMiA9IDJlMTg7CiAgICBzZWdbdl0uY250ID0gZGw7CgogICAgc2VnW3ZdLmxhenlfdXN0YXcgPSB2YWw7CiAgICBzZWdbdl0ubGF6eV9hZGQgPSAwOwp9Cgp2b2lkIGRvZGFqKGludCB2LCBpbnQgbCwgaW50IHIsIGxsIHZhbCl7CiAgICBpZih2YWwgPT0gMCkgcmV0dXJuOwogICAgCiAgICBpZihzZWdbdl0ubGF6eV91c3Rhdyl7CiAgICAgICAgdXN0YXcodiwgbCwgciwgdmFsICsgc2VnW3ZdLmxhenlfdXN0YXcpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgc2VnW3ZdLmggPSAoc2VnW3ZdLmggKiBwb3RlZ2EoWCwgdmFsKSkgJSBtb2Q7CiAgICAKICAgIHNlZ1t2XS5tbjEgKz0gdmFsOwogICAgaWYoc2VnW3ZdLm1uMiAhPSAyZTE4KSBzZWdbdl0ubW4yICs9IHZhbDsKICAgIHNlZ1t2XS5sYXp5X2FkZCArPSB2YWw7Cn0KCnZvaWQgbWF4dWooaW50IHYsIGludCBsLCBpbnQgciwgbGwgdmFsKXsKICAgIGlmKHZhbCA8PSBzZWdbdl0ubW4xKSByZXR1cm47CiAgICAKICAgIGxsIHN0YXJ5X2hhc2hfbWluID0gKHNlZ1t2XS5jbnQgKiBwb3RlZ2EoWCwgc2VnW3ZdLm1uMSkpICUgbW9kOwogICAgbGwgbm93eV9oYXNoX21pbiA9IChzZWdbdl0uY250ICogcG90ZWdhKFgsIHZhbCkpICUgbW9kOwogICAgCiAgICBzZWdbdl0uaCA9IChzZWdbdl0uaCAtIHN0YXJ5X2hhc2hfbWluICsgbm93eV9oYXNoX21pbiArIG1vZCkgJSBtb2Q7CiAgICAKICAgIHNlZ1t2XS5tbjEgPSB2YWw7CiAgICBpZihzZWdbdl0ubGF6eV91c3RhdyAhPSAwKSBzZWdbdl0ubGF6eV91c3RhdyA9IG1heCh2YWwsIHNlZ1t2XS5sYXp5X3VzdGF3KTsKfQoKdm9pZCBwdXNoKGludCB2LCBpbnQgbCwgaW50IHIpewogICAgaWYobCA9PSByKSByZXR1cm47CgogICAgaW50IG1pZCA9IChsICsgcikgLyAyOwogICAgaWYoc2VnW3ZdLmxhenlfdXN0YXcgIT0gMCl7CiAgICAgICAgdXN0YXcoMiAqIHYsIGwsIG1pZCwgc2VnW3ZdLmxhenlfdXN0YXcpOwogICAgICAgIHVzdGF3KDIgKiB2ICsgMSwgbWlkICsgMSwgciwgc2VnW3ZdLmxhenlfdXN0YXcpOwogICAgICAgIHNlZ1t2XS5sYXp5X3VzdGF3ID0gMDsKICAgIH0KCiAgICBpZihzZWdbdl0ubGF6eV9hZGQgIT0gMCl7CiAgICAgICAgZG9kYWooMiAqIHYsIGwsIG1pZCwgc2VnW3ZdLmxhenlfYWRkKTsKICAgICAgICBkb2RhaigyICogdiArIDEsIG1pZCArIDEsIHIsIHNlZ1t2XS5sYXp5X2FkZCk7CiAgICAgICAgc2VnW3ZdLmxhenlfYWRkID0gMDsKICAgIH0KCiAgICBpZihzZWdbMiAqIHZdLm1uMSA8IHNlZ1t2XS5tbjEpIG1heHVqKDIgKiB2LCBsLCBtaWQsIHNlZ1t2XS5tbjEpOwogICAgaWYoc2VnWzIgKiB2ICsgMV0ubW4xIDwgc2VnW3ZdLm1uMSkgbWF4dWooMiAqIHYgKyAxLCBtaWQgKyAxLCByLCBzZWdbdl0ubW4xKTsKfQoKdm9pZCBidWlsZChpbnQgdiwgaW50IGwsIGludCByKXsKICAgIGlmKGwgPT0gcil7CiAgICAgICAgc2VnW3ZdLmggPSBwb3RlZ2EoWCwgdGFiW2xdKTsKICAgICAgICAKICAgICAgICBzZWdbdl0ubW4xID0gdGFiW2xdOwogICAgICAgIHNlZ1t2XS5jbnQgPSAxOyAKICAgICAgICBzZWdbdl0ubW4yID0gMmUxODsKICAgICAgICAKICAgICAgICBzZWdbdl0ubGF6eV91c3RhdyA9IDA7IAogICAgICAgIHNlZ1t2XS5sYXp5X2FkZCA9IDA7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGludCBtaWQgPSAobCArIHIpIC8gMjsKICAgIGJ1aWxkKDIgKiB2LCBsLCBtaWQpOwogICAgYnVpbGQoMiAqIHYgKyAxLCBtaWQgKyAxLCByKTsKCiAgICBhcHBseSh2KTsKfQoKdm9pZCB1cGRfZG9kKGludCB2LCBpbnQgbCwgaW50IHIsIGludCBxbCwgaW50IHFyLCBsbCB2YWwpewogICAgaWYocWwgPiBxciB8fCBxciA8IGwgfHwgcWwgPiByKSByZXR1cm47CiAgICBpZihxbCA8PSBsICYmIHIgPD0gcXIpewogICAgICAgIGRvZGFqKHYsIGwsIHIsIHZhbCk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHB1c2godiwgbCwgcik7CgogICAgaW50IG1pZCA9IChsICsgcikgLyAyOwogICAgdXBkX2RvZCgyICogdiwgbCwgbWlkLCBxbCwgcXIsIHZhbCk7IAogICAgdXBkX2RvZCgyICogdiArIDEsIG1pZCArIDEsIHIsIHFsLCBxciwgdmFsKTsKCiAgICBhcHBseSh2KTsKfQoKdm9pZCB1cGRfdXN0YXcoaW50IHYsIGludCBsLCBpbnQgciwgaW50IHFsLCBpbnQgcXIsIGxsIHZhbCl7CiAgICBpZihxbCA+IHFyIHx8IHFyIDwgbCB8fCBxbCA+IHIpIHJldHVybjsKICAgIGlmKHFsIDw9IGwgJiYgciA8PSBxcil7CiAgICAgICAgdXN0YXcodiwgbCwgciwgdmFsKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcHVzaCh2LCBsLCByKTsKCiAgICBpbnQgbWlkID0gKGwgKyByKSAvIDI7CiAgICB1cGRfdXN0YXcoMiAqIHYsIGwsIG1pZCwgcWwsIHFyLCB2YWwpOyAKICAgIHVwZF91c3RhdygyICogdiArIDEsIG1pZCArIDEsIHIsIHFsLCBxciwgdmFsKTsKCiAgICBhcHBseSh2KTsKfQoKdm9pZCB1cGRfbXgoaW50IHYsIGludCBsLCBpbnQgciwgaW50IHFsLCBpbnQgcXIsIGxsIHZhbCl7CiAgICBpZihxbCA+IHFyIHx8IHFyIDwgbCB8fCBxbCA+IHIpIHJldHVybjsKICAgIGlmKHZhbCA8PSBzZWdbdl0ubW4xKSByZXR1cm47CiAgICBpZihxbCA8PSBsICYmIHIgPD0gcXIgJiYgc2VnW3ZdLm1uMiA+IHZhbCl7CiAgICAgICAgbWF4dWoodiwgbCwgciwgdmFsKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgcHVzaCh2LCBsLCByKTsKCiAgICBpbnQgbWlkID0gKGwgKyByKSAvIDI7CiAgICB1cGRfbXgoMiAqIHYsIGwsIG1pZCwgcWwsIHFyLCB2YWwpOyAKICAgIHVwZF9teCgyICogdiArIDEsIG1pZCArIDEsIHIsIHFsLCBxciwgdmFsKTsKCiAgICBhcHBseSh2KTsKfQoKbGwgcXVlcnkoaW50IHYsIGludCBsLCBpbnQgciwgaW50IHFsLCBpbnQgcXIpewogICAgaWYocWwgPiBxciB8fCBxciA8IGwgfHwgcWwgPiByKXsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGlmKHFsIDw9IGwgJiYgciA8PSBxcil7CiAgICAgICAgcmV0dXJuIHNlZ1t2XS5oOwogICAgfQoKICAgIHB1c2godiwgbCwgcik7CgogICAgaW50IG1pZCA9IChsICsgcikgLyAyOwogICAgbGwgbGV3eSA9IHF1ZXJ5KDIgKiB2LCBsLCBtaWQsIHFsLCBxcik7CiAgICBsbCBwcmF3eSA9IHF1ZXJ5KDIgKiB2ICsgMSwgbWlkICsgMSwgciwgcWwsIHFyKTsKCiAgICByZXR1cm4gKGxld3kgKyBwcmF3eSkgJSBtb2Q7Cn0KCmludCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCiAgICBpbnQgbiwgcTsKICAgIGNpbiA+PiBuID4+IHE7CgogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiB0YWJbaV07CiAgICBidWlsZCgxLCAxLCBuKTsKCiAgICB3aGlsZShxLS0pewogICAgICAgIGludCB0eXA7IGNpbiA+PiB0eXA7CiAgICAgICAgaWYodHlwID09IDEpewogICAgICAgICAgICBpbnQgbCwgcjsgbGwgazsKICAgICAgICAgICAgY2luID4+IGwgPj4gciA+PiBrOwogICAgICAgICAgICB1cGRfdXN0YXcoMSwgMSwgbiwgbCwgciwgayk7CiAgICAgICAgfWVsc2UgaWYodHlwID09IDIpewogICAgICAgICAgICBpbnQgbCwgcjsgbGwgazsKICAgICAgICAgICAgY2luID4+IGwgPj4gciA+PiBrOwogICAgICAgICAgICB1cGRfZG9kKDEsIDEsIG4sIGwsIHIsIGspOwogICAgICAgIH1lbHNlIGlmKHR5cCA9PSAzKXsKICAgICAgICAgICAgaW50IGwsIHI7IGxsIGs7CiAgICAgICAgICAgIGNpbiA+PiBsID4+IHIgPj4gazsKICAgICAgICAgICAgdXBkX214KDEsIDEsIG4sIGwsIHIsIGspOwogICAgICAgIH1lbHNlewogICAgICAgICAgICBpbnQgbDEsIHIxLCBsMiwgcjI7CiAgICAgICAgICAgIGNpbiA+PiBsMSA+PiByMSA+PiBsMiA+PiByMjsKICAgICAgICAgICAgaWYocXVlcnkoMSwgMSwgbiwgbDEsIHIxKSA9PSBxdWVyeSgxLCAxLCBuLCBsMiwgcjIpKSBjb3V0IDw8ICJUQUtcbiI7CiAgICAgICAgICAgIGVsc2UgY291dCA8PCAiTklFXG4iOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMDsKfQ==