#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template<class T> using oset =
tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define int long long
#define ld long double
#define ar array
#define vi vector<int>
#define vii vector<vector<int>>
#define pii pair<int, int>
#define pb push_back
#define all(x) x.begin(), x.end()
#define f first
#define s second
#define endl "\n"
const int MOD = 1e9+7;
const int inf = 1e9;
const int linf = 1e18;
const int d4i[4]={-1, 0, 1, 0}, d4j[4]={0, 1, 0, -1};
const int d8i[8]={-1, -1, 0, 1, 1, 1, 0, -1}, d8j[8]={0, 1, 1, 1, 0, -1, -1, -1};
// -------------------------------------------------- Main Code --------------------------------------------------
const int N = 2e5+5;
int bsize = sqrt(N)+1;
int arr[N], pref[N];
void sol() {
int n, q; cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> arr[i];
for (int i = 1; i <= n; i++) pref[i] += arr[i]+pref[i-1];
auto sum = [&](int x) {return x*(x+1)/2;};
auto get = [&](int x, int y, int l, int r) {
// calculating effect of l-r in x-y segment
if (x > r || y < l) return 0ll;
r = min(r, y);
int res = sum(r-l+1) - (l<x)*sum(x-l);
return res;
};
vector<pii> pending;
for (int i = 0; i < q; i++) {
int t, a, b; cin >> t >> a >> b;
if (t == 1) pending.pb({a, b});
else {
int ans = pref[b]-pref[a-1];
for (auto i : pending) {
int l = i.f, r = i.s;
ans += get(a, b, l, r);
}
cout << ans << endl;
}
if (pending.size() == bsize) {
vi positive(n+2), negative(n+2);
for (auto i : pending) {
positive[i.f]++;
positive[i.s+1]--;
negative[i.s+1] += -(i.s-i.f+1);
}
int sum = 0, ct = 0;
for (int i = 1; i <= n; i++) {
ct += positive[i];
sum += ct+negative[i];
positive[i] = sum;
arr[i] += positive[i];
pref[i] = arr[i]+pref[i-1];
}
pending.clear();
}
}
}
signed main () {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t = 1;
// cin >> t;
while (t--) {
sol();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7CiAKdGVtcGxhdGU8Y2xhc3MgVD4gdXNpbmcgb3NldCA9IAogICAgICAgICAgICB0cmVlPFQsIG51bGxfdHlwZSwgbGVzczxUPiwgcmJfdHJlZV90YWcsIHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT47CiAKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBhciBhcnJheQojZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiNkZWZpbmUgdmlpIHZlY3Rvcjx2ZWN0b3I8aW50Pj4KI2RlZmluZSBwaWkgcGFpcjxpbnQsIGludD4KI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgZiBmaXJzdAojZGVmaW5lIHMgc2Vjb25kCiNkZWZpbmUgZW5kbCAiXG4iCiAKY29uc3QgaW50IE1PRCA9IDFlOSs3Owpjb25zdCBpbnQgaW5mID0gMWU5Owpjb25zdCBpbnQgbGluZiA9IDFlMTg7CiAKY29uc3QgaW50IGQ0aVs0XT17LTEsIDAsIDEsIDB9LCBkNGpbNF09ezAsIDEsIDAsIC0xfTsKY29uc3QgaW50IGQ4aVs4XT17LTEsIC0xLCAwLCAxLCAxLCAxLCAwLCAtMX0sIGQ4als4XT17MCwgMSwgMSwgMSwgMCwgLTEsIC0xLCAtMX07CiAKIAovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWluIENvZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApjb25zdCBpbnQgTiA9IDJlNSs1OwppbnQgYnNpemUgPSBzcXJ0KE4pKzE7CiAKaW50IGFycltOXSwgcHJlZltOXTsKIAp2b2lkIHNvbCgpIHsKICAgIGludCBuLCBxOyBjaW4gPj4gbiA+PiBxOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4gYXJyW2ldOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBwcmVmW2ldICs9IGFycltpXStwcmVmW2ktMV07CiAKICAgIGF1dG8gc3VtID0gWyZdKGludCB4KSB7cmV0dXJuIHgqKHgrMSkvMjt9OwogICAgYXV0byBnZXQgPSBbJl0oaW50IHgsIGludCB5LCBpbnQgbCwgaW50IHIpIHsKICAgICAgICAvLyBjYWxjdWxhdGluZyBlZmZlY3Qgb2YgbC1yIGluIHgteSBzZWdtZW50CiAgICAgICAgaWYgKHggPiByIHx8IHkgPCBsKSByZXR1cm4gMGxsOwogICAgICAgIHIgPSBtaW4ociwgeSk7CiAgICAgICAgaW50IHJlcyA9IHN1bShyLWwrMSkgLSAobDx4KSpzdW0oeC1sKTsKICAgICAgICByZXR1cm4gcmVzOwogICAgfTsKIAogICAgdmVjdG9yPHBpaT4gcGVuZGluZzsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcTsgaSsrKSB7CiAgICAgICAgaW50IHQsIGEsIGI7IGNpbiA+PiB0ID4+IGEgPj4gYjsKICAgICAgICBpZiAodCA9PSAxKSBwZW5kaW5nLnBiKHthLCBifSk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGludCBhbnMgPSBwcmVmW2JdLXByZWZbYS0xXTsKICAgICAgICAgICAgZm9yIChhdXRvIGkgOiBwZW5kaW5nKSB7CiAgICAgICAgICAgICAgICBpbnQgbCA9IGkuZiwgciA9IGkuczsKICAgICAgICAgICAgICAgIGFucyArPSBnZXQoYSwgYiwgbCwgcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY291dCA8PCBhbnMgPDwgZW5kbDsKICAgICAgICB9CiAKICAgICAgICBpZiAocGVuZGluZy5zaXplKCkgPT0gYnNpemUpIHsKICAgICAgICAgICAgdmkgcG9zaXRpdmUobisyKSwgbmVnYXRpdmUobisyKTsKICAgICAgICAgICAgZm9yIChhdXRvIGkgOiBwZW5kaW5nKSB7CiAgICAgICAgICAgICAgICBwb3NpdGl2ZVtpLmZdKys7CiAgICAgICAgICAgICAgICBwb3NpdGl2ZVtpLnMrMV0tLTsKICAgICAgICAgICAgICAgIG5lZ2F0aXZlW2kucysxXSArPSAtKGkucy1pLmYrMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW50IHN1bSA9IDAsIGN0ID0gMDsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgICAgICBjdCArPSBwb3NpdGl2ZVtpXTsKICAgICAgICAgICAgICAgIHN1bSArPSBjdCtuZWdhdGl2ZVtpXTsKICAgICAgICAgICAgICAgIHBvc2l0aXZlW2ldID0gc3VtOwogICAgICAgICAgICAgICAgYXJyW2ldICs9IHBvc2l0aXZlW2ldOwogICAgICAgICAgICAgICAgcHJlZltpXSA9IGFycltpXStwcmVmW2ktMV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcGVuZGluZy5jbGVhcigpOwogICAgICAgIH0KICAgIH0KfQogCnNpZ25lZCBtYWluICgpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIGludCB0ID0gMTsKICAgIC8vIGNpbiA+PiB0OyAKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2woKTsKICAgIH0KICAgIHJldHVybiAwOwp9