#include <bits/stdc++.h>
using namespace std;
using ll = long long;
std::mt19937 rng((unsigned)chrono::high_resolution_clock::now().time_since_epoch().count());
struct Node {
int val;
int pr;
int sz;
ll sum;
bool rev;
Node *l, *r;
Node(int _v=0): val(_v), pr((int)rng()), sz(1), sum(_v), rev(false), l(nullptr), r(nullptr) {}
};
inline int getsz(Node* t){ return t ? t->sz : 0; }
inline ll getsum(Node* t){ return t ? t->sum : 0; }
void pull(Node* t){
if(!t) return;
t->sz = 1 + getsz(t->l) + getsz(t->r);
t->sum = (ll)t->val + getsum(t->l) + getsum(t->r);
}
void apply_rev(Node* t){
if(!t) return;
t->rev ^= 1;
swap(t->l, t->r);
}
void push(Node* t){
if(!t || !t->rev) return;
if(t->l) apply_rev(t->l);
if(t->r) apply_rev(t->r);
t->rev = false;
}
// split by first k elements: left contains first k, right the rest
void split(Node* t, int k, Node*& left, Node*& right){
if(!t){ left = right = nullptr; return; }
push(t);
if(getsz(t->l) >= k){
// all needed in left subtree
split(t->l, k, left, t->l);
right = t;
pull(right);
} else {
split(t->r, k - getsz(t->l) - 1, t->r, right);
left = t;
pull(left);
}
}
Node* merge(Node* a, Node* b){
if(!a || !b) return a ? a : b;
if(a->pr > b->pr){
push(a);
a->r = merge(a->r, b);
pull(a);
return a;
} else {
push(b);
b->l = merge(a, b->l);
pull(b);
return b;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
if(!(cin >> n >> m)) return 0;
Node* root = nullptr;
// build by successive merges (expected O(n))
for(int i=0;i<n;i++){
int x; cin >> x;
Node* node = new Node(x);
root = merge(root, node);
}
while(m--){
int t, a, b;
cin >> t >> a >> b;
// split into [1..a-1], [a..b], [b+1..n]
Node *L, *M, *R;
split(root, a-1, L, R);
split(R, b - a + 1, M, R);
if(t == 1){
// reverse segment
if(M) apply_rev(M);
} else if(t == 2){
ll ans = M ? M->sum : 0;
cout << ans << '\n';
}
// merge back
root = merge( merge(L, M), R );
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwpzdGQ6Om10MTk5Mzcgcm5nKCh1bnNpZ25lZCljaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwoKc3RydWN0IE5vZGUgewogICAgaW50IHZhbDsKICAgIGludCBwcjsKICAgIGludCBzejsKICAgIGxsIHN1bTsKICAgIGJvb2wgcmV2OwogICAgTm9kZSAqbCwgKnI7CiAgICBOb2RlKGludCBfdj0wKTogdmFsKF92KSwgcHIoKGludClybmcoKSksIHN6KDEpLCBzdW0oX3YpLCByZXYoZmFsc2UpLCBsKG51bGxwdHIpLCByKG51bGxwdHIpIHt9Cn07CgppbmxpbmUgaW50IGdldHN6KE5vZGUqIHQpeyByZXR1cm4gdCA/IHQtPnN6IDogMDsgfQppbmxpbmUgbGwgZ2V0c3VtKE5vZGUqIHQpeyByZXR1cm4gdCA/IHQtPnN1bSA6IDA7IH0KCnZvaWQgcHVsbChOb2RlKiB0KXsKICAgIGlmKCF0KSByZXR1cm47CiAgICB0LT5zeiA9IDEgKyBnZXRzeih0LT5sKSArIGdldHN6KHQtPnIpOwogICAgdC0+c3VtID0gKGxsKXQtPnZhbCArIGdldHN1bSh0LT5sKSArIGdldHN1bSh0LT5yKTsKfQoKdm9pZCBhcHBseV9yZXYoTm9kZSogdCl7CiAgICBpZighdCkgcmV0dXJuOwogICAgdC0+cmV2IF49IDE7CiAgICBzd2FwKHQtPmwsIHQtPnIpOwp9Cgp2b2lkIHB1c2goTm9kZSogdCl7CiAgICBpZighdCB8fCAhdC0+cmV2KSByZXR1cm47CiAgICBpZih0LT5sKSBhcHBseV9yZXYodC0+bCk7CiAgICBpZih0LT5yKSBhcHBseV9yZXYodC0+cik7CiAgICB0LT5yZXYgPSBmYWxzZTsKfQoKLy8gc3BsaXQgYnkgZmlyc3QgayBlbGVtZW50czogbGVmdCBjb250YWlucyBmaXJzdCBrLCByaWdodCB0aGUgcmVzdAp2b2lkIHNwbGl0KE5vZGUqIHQsIGludCBrLCBOb2RlKiYgbGVmdCwgTm9kZSomIHJpZ2h0KXsKICAgIGlmKCF0KXsgbGVmdCA9IHJpZ2h0ID0gbnVsbHB0cjsgcmV0dXJuOyB9CiAgICBwdXNoKHQpOwogICAgaWYoZ2V0c3oodC0+bCkgPj0gayl7CiAgICAgICAgLy8gYWxsIG5lZWRlZCBpbiBsZWZ0IHN1YnRyZWUKICAgICAgICBzcGxpdCh0LT5sLCBrLCBsZWZ0LCB0LT5sKTsKICAgICAgICByaWdodCA9IHQ7CiAgICAgICAgcHVsbChyaWdodCk7CiAgICB9IGVsc2UgewogICAgICAgIHNwbGl0KHQtPnIsIGsgLSBnZXRzeih0LT5sKSAtIDEsIHQtPnIsIHJpZ2h0KTsKICAgICAgICBsZWZ0ID0gdDsKICAgICAgICBwdWxsKGxlZnQpOwogICAgfQp9CgpOb2RlKiBtZXJnZShOb2RlKiBhLCBOb2RlKiBiKXsKICAgIGlmKCFhIHx8ICFiKSByZXR1cm4gYSA/IGEgOiBiOwogICAgaWYoYS0+cHIgPiBiLT5wcil7CiAgICAgICAgcHVzaChhKTsKICAgICAgICBhLT5yID0gbWVyZ2UoYS0+ciwgYik7CiAgICAgICAgcHVsbChhKTsKICAgICAgICByZXR1cm4gYTsKICAgIH0gZWxzZSB7CiAgICAgICAgcHVzaChiKTsKICAgICAgICBiLT5sID0gbWVyZ2UoYSwgYi0+bCk7CiAgICAgICAgcHVsbChiKTsKICAgICAgICByZXR1cm4gYjsKICAgIH0KfQoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBpbnQgbiwgbTsKICAgIGlmKCEoY2luID4+IG4gPj4gbSkpIHJldHVybiAwOwogICAgTm9kZSogcm9vdCA9IG51bGxwdHI7CiAgICAvLyBidWlsZCBieSBzdWNjZXNzaXZlIG1lcmdlcyAoZXhwZWN0ZWQgTyhuKSkKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspewogICAgICAgIGludCB4OyBjaW4gPj4geDsKICAgICAgICBOb2RlKiBub2RlID0gbmV3IE5vZGUoeCk7CiAgICAgICAgcm9vdCA9IG1lcmdlKHJvb3QsIG5vZGUpOwogICAgfQoKICAgIHdoaWxlKG0tLSl7CiAgICAgICAgaW50IHQsIGEsIGI7CiAgICAgICAgY2luID4+IHQgPj4gYSA+PiBiOwogICAgICAgIC8vIHNwbGl0IGludG8gWzEuLmEtMV0sIFthLi5iXSwgW2IrMS4ubl0KICAgICAgICBOb2RlICpMLCAqTSwgKlI7CiAgICAgICAgc3BsaXQocm9vdCwgYS0xLCBMLCBSKTsKICAgICAgICBzcGxpdChSLCBiIC0gYSArIDEsIE0sIFIpOwogICAgICAgIGlmKHQgPT0gMSl7CiAgICAgICAgICAgIC8vIHJldmVyc2Ugc2VnbWVudAogICAgICAgICAgICBpZihNKSBhcHBseV9yZXYoTSk7CiAgICAgICAgfSBlbHNlIGlmKHQgPT0gMil7CiAgICAgICAgICAgIGxsIGFucyA9IE0gPyBNLT5zdW0gOiAwOwogICAgICAgICAgICBjb3V0IDw8IGFucyA8PCAnXG4nOwogICAgICAgIH0KICAgICAgICAvLyBtZXJnZSBiYWNrCiAgICAgICAgcm9vdCA9IG1lcmdlKCBtZXJnZShMLCBNKSwgUiApOwogICAgfQogICAgcmV0dXJuIDA7Cn0=