#include <bits/stdc++.h>
using namespace std;
// Structure to store differences applied to the Fenwick Trees
struct Event {
int type; // 0 for Vertical, 1 for Diagonal
int pos;
long long val;
};
// Structure for offline prefix queries
struct Query {
int X;
int sign;
int id;
};
// Binary Indexed Tree designed using __int128_t to completely prevent large sum overflows
struct BIT {
int n;
vector<__int128_t> tree;
BIT(int n) : n(n), tree(n + 1, 0) {}
void add(int i, __int128_t delta) {
if (i <= 0) return;
for (; i <= n; i += i & -i) tree[i] += delta;
}
__int128_t query(int i) {
if (i <= 0) return 0;
i = min(i, n);
__int128_t sum = 0;
for (; i > 0; i -= i & -i) sum += tree[i];
return sum;
}
};
// Safely queues the boundary events ensuring they are added within valid time T bounds
void add_seg(int type, int pos, long long V, long long Ts, long long Te, vector<vector<Event>>& evs, int N) {
Ts = max(0LL, Ts);
Te = min((long long)N, Te);
if (Ts <= Te) {
evs[Ts].push_back({type, pos, V});
if (Te + 1 <= N) {
evs[Te + 1].push_back({type, pos, -V});
}
}
}
int main() {
// Fast I/O
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N, Q;
if (!(cin >> N >> Q)) return 0;
vector<long long> S(N + 1);
for (int i = 1; i <= N; ++i) {
cin >> S[i];
}
// P[i]: largest j < i such that S[j] > S[i]
vector<int> P(N + 1);
vector<int> st;
for (int i = 1; i <= N; ++i) {
while (!st.empty() && S[st.back()] <= S[i]) st.pop_back();
P[i] = st.empty() ? -1e9 : st.back();
st.push_back(i);
}
// N_idx[i]: smallest j > i such that S[j] >= S[i]
vector<int> N_idx(N + 1);
st.clear();
for (int i = N; i >= 1; --i) {
while (!st.empty() && S[st.back()] < S[i]) st.pop_back();
N_idx[i] = st.empty() ? N + 1 : st.back();
st.push_back(i);
}
vector<vector<Event>> evs(N + 2);
for (int i = 1; i <= N; ++i) {
long long p = P[i];
long long n = N_idx[i];
long long v = S[i];
// Generate the 4 boundary segments for the geometric region mapped to this S[i]
// Pos 1 (Vertical): Starts immediately, stops when it hits diagonal overlap
add_seg(0, i, v, 0, i - p - 1, evs, N);
// Pos 2 (Diagonal): Takes over after vertical overlap finishes
add_seg(1, p + 1, v, i - p, n - p - 2, evs, N);
// Neg 1 (Diagonal): Maintains bounded window sliding rightward
add_seg(1, i + 1, -v, 0, n - i - 1, evs, N);
// Neg 2 (Vertical): Cutoff segment if a greater/equal element takes rightward dominance
add_seg(0, n, -v, n - i, n - p - 2, evs, N);
}
// Subdividing range queries into prefix summations
vector<vector<Query>> queries(N + 2);
for (int j = 0; j < Q; ++j) {
int T, L, R;
cin >> T >> L >> R;
queries[T].push_back({R, 1, j});
queries[T].push_back({L - 1, -1, j});
}
BIT bit_V(N + 2), bit_yV(N + 2);
BIT bit_D(N + 2), bit_CD(N + 2);
vector<long long> ans(Q, 0);
// Sweep-line passing over time intervals T
for (int T = 0; T <= N; ++T) {
for (auto& ev : evs[T]) {
if (ev.type == 0) {
bit_V.add(ev.pos, ev.val);
bit_yV.add(ev.pos, (__int128_t)ev.pos * ev.val);
} else {
bit_D.add(ev.pos, ev.val);
bit_CD.add(ev.pos, (__int128_t)ev.pos * ev.val);
}
}
// Answer all sub-queries offline at the current T
for (auto& q : queries[T]) {
if (q.X == 0) continue;
long long X = q.X;
__int128_t res = 0;
// Prefix formulas factoring (X + 1) * V - y * V offsets
__int128_t sum_V = bit_V.query(X);
__int128_t sum_yV = bit_yV.query(X);
res += (X + 1) * sum_V - sum_yV;
if (X - T >= 1) {
__int128_t sum_D = bit_D.query(X - T);
__int128_t sum_CD = bit_CD.query(X - T);
res += (X + 1 - T) * sum_D - sum_CD;
}
if (q.sign == 1) ans[q.id] += (long long)res;
else ans[q.id] -= (long long)res;
}
}
for (int j = 0; j < Q; ++j) {
cout << ans[j] << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBTdHJ1Y3R1cmUgdG8gc3RvcmUgZGlmZmVyZW5jZXMgYXBwbGllZCB0byB0aGUgRmVud2ljayBUcmVlcwpzdHJ1Y3QgRXZlbnQgewogICAgaW50IHR5cGU7IC8vIDAgZm9yIFZlcnRpY2FsLCAxIGZvciBEaWFnb25hbAogICAgaW50IHBvczsKICAgIGxvbmcgbG9uZyB2YWw7Cn07CgovLyBTdHJ1Y3R1cmUgZm9yIG9mZmxpbmUgcHJlZml4IHF1ZXJpZXMKc3RydWN0IFF1ZXJ5IHsKICAgIGludCBYOwogICAgaW50IHNpZ247CiAgICBpbnQgaWQ7Cn07CgovLyBCaW5hcnkgSW5kZXhlZCBUcmVlIGRlc2lnbmVkIHVzaW5nIF9faW50MTI4X3QgdG8gY29tcGxldGVseSBwcmV2ZW50IGxhcmdlIHN1bSBvdmVyZmxvd3MKc3RydWN0IEJJVCB7CiAgICBpbnQgbjsKICAgIHZlY3RvcjxfX2ludDEyOF90PiB0cmVlOwogICAgQklUKGludCBuKSA6IG4obiksIHRyZWUobiArIDEsIDApIHt9CiAgICAKICAgIHZvaWQgYWRkKGludCBpLCBfX2ludDEyOF90IGRlbHRhKSB7CiAgICAgICAgaWYgKGkgPD0gMCkgcmV0dXJuOwogICAgICAgIGZvciAoOyBpIDw9IG47IGkgKz0gaSAmIC1pKSB0cmVlW2ldICs9IGRlbHRhOwogICAgfQogICAgCiAgICBfX2ludDEyOF90IHF1ZXJ5KGludCBpKSB7CiAgICAgICAgaWYgKGkgPD0gMCkgcmV0dXJuIDA7CiAgICAgICAgaSA9IG1pbihpLCBuKTsKICAgICAgICBfX2ludDEyOF90IHN1bSA9IDA7CiAgICAgICAgZm9yICg7IGkgPiAwOyBpIC09IGkgJiAtaSkgc3VtICs9IHRyZWVbaV07CiAgICAgICAgcmV0dXJuIHN1bTsKICAgIH0KfTsKCi8vIFNhZmVseSBxdWV1ZXMgdGhlIGJvdW5kYXJ5IGV2ZW50cyBlbnN1cmluZyB0aGV5IGFyZSBhZGRlZCB3aXRoaW4gdmFsaWQgdGltZSBUIGJvdW5kcwp2b2lkIGFkZF9zZWcoaW50IHR5cGUsIGludCBwb3MsIGxvbmcgbG9uZyBWLCBsb25nIGxvbmcgVHMsIGxvbmcgbG9uZyBUZSwgdmVjdG9yPHZlY3RvcjxFdmVudD4+JiBldnMsIGludCBOKSB7CiAgICBUcyA9IG1heCgwTEwsIFRzKTsKICAgIFRlID0gbWluKChsb25nIGxvbmcpTiwgVGUpOwogICAgaWYgKFRzIDw9IFRlKSB7CiAgICAgICAgZXZzW1RzXS5wdXNoX2JhY2soe3R5cGUsIHBvcywgVn0pOwogICAgICAgIGlmIChUZSArIDEgPD0gTikgewogICAgICAgICAgICBldnNbVGUgKyAxXS5wdXNoX2JhY2soe3R5cGUsIHBvcywgLVZ9KTsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgLy8gRmFzdCBJL08KICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIAogICAgaW50IE4sIFE7CiAgICBpZiAoIShjaW4gPj4gTiA+PiBRKSkgcmV0dXJuIDA7CiAgICAKICAgIHZlY3Rvcjxsb25nIGxvbmc+IFMoTiArIDEpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gTjsgKytpKSB7CiAgICAgICAgY2luID4+IFNbaV07CiAgICB9CgogICAgLy8gUFtpXTogbGFyZ2VzdCBqIDwgaSBzdWNoIHRoYXQgU1tqXSA+IFNbaV0KICAgIHZlY3RvcjxpbnQ+IFAoTiArIDEpOwogICAgdmVjdG9yPGludD4gc3Q7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBOOyArK2kpIHsKICAgICAgICB3aGlsZSAoIXN0LmVtcHR5KCkgJiYgU1tzdC5iYWNrKCldIDw9IFNbaV0pIHN0LnBvcF9iYWNrKCk7CiAgICAgICAgUFtpXSA9IHN0LmVtcHR5KCkgPyAtMWU5IDogc3QuYmFjaygpOwogICAgICAgIHN0LnB1c2hfYmFjayhpKTsKICAgIH0KICAgIAogICAgLy8gTl9pZHhbaV06IHNtYWxsZXN0IGogPiBpIHN1Y2ggdGhhdCBTW2pdID49IFNbaV0KICAgIHZlY3RvcjxpbnQ+IE5faWR4KE4gKyAxKTsKICAgIHN0LmNsZWFyKCk7CiAgICBmb3IgKGludCBpID0gTjsgaSA+PSAxOyAtLWkpIHsKICAgICAgICB3aGlsZSAoIXN0LmVtcHR5KCkgJiYgU1tzdC5iYWNrKCldIDwgU1tpXSkgc3QucG9wX2JhY2soKTsKICAgICAgICBOX2lkeFtpXSA9IHN0LmVtcHR5KCkgPyBOICsgMSA6IHN0LmJhY2soKTsKICAgICAgICBzdC5wdXNoX2JhY2soaSk7CiAgICB9CgogICAgdmVjdG9yPHZlY3RvcjxFdmVudD4+IGV2cyhOICsgMik7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBOOyArK2kpIHsKICAgICAgICBsb25nIGxvbmcgcCA9IFBbaV07CiAgICAgICAgbG9uZyBsb25nIG4gPSBOX2lkeFtpXTsKICAgICAgICBsb25nIGxvbmcgdiA9IFNbaV07CgogICAgICAgIC8vIEdlbmVyYXRlIHRoZSA0IGJvdW5kYXJ5IHNlZ21lbnRzIGZvciB0aGUgZ2VvbWV0cmljIHJlZ2lvbiBtYXBwZWQgdG8gdGhpcyBTW2ldCiAgICAgICAgLy8gUG9zIDEgKFZlcnRpY2FsKTogIFN0YXJ0cyBpbW1lZGlhdGVseSwgc3RvcHMgd2hlbiBpdCBoaXRzIGRpYWdvbmFsIG92ZXJsYXAKICAgICAgICBhZGRfc2VnKDAsIGksIHYsIDAsIGkgLSBwIC0gMSwgZXZzLCBOKTsKICAgICAgICAvLyBQb3MgMiAoRGlhZ29uYWwpOiAgVGFrZXMgb3ZlciBhZnRlciB2ZXJ0aWNhbCBvdmVybGFwIGZpbmlzaGVzCiAgICAgICAgYWRkX3NlZygxLCBwICsgMSwgdiwgaSAtIHAsIG4gLSBwIC0gMiwgZXZzLCBOKTsKICAgICAgICAKICAgICAgICAvLyBOZWcgMSAoRGlhZ29uYWwpOiAgTWFpbnRhaW5zIGJvdW5kZWQgd2luZG93IHNsaWRpbmcgcmlnaHR3YXJkCiAgICAgICAgYWRkX3NlZygxLCBpICsgMSwgLXYsIDAsIG4gLSBpIC0gMSwgZXZzLCBOKTsKICAgICAgICAvLyBOZWcgMiAoVmVydGljYWwpOiAgQ3V0b2ZmIHNlZ21lbnQgaWYgYSBncmVhdGVyL2VxdWFsIGVsZW1lbnQgdGFrZXMgcmlnaHR3YXJkIGRvbWluYW5jZQogICAgICAgIGFkZF9zZWcoMCwgbiwgLXYsIG4gLSBpLCBuIC0gcCAtIDIsIGV2cywgTik7CiAgICB9CgogICAgLy8gU3ViZGl2aWRpbmcgcmFuZ2UgcXVlcmllcyBpbnRvIHByZWZpeCBzdW1tYXRpb25zCiAgICB2ZWN0b3I8dmVjdG9yPFF1ZXJ5Pj4gcXVlcmllcyhOICsgMik7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IFE7ICsraikgewogICAgICAgIGludCBULCBMLCBSOwogICAgICAgIGNpbiA+PiBUID4+IEwgPj4gUjsKICAgICAgICBxdWVyaWVzW1RdLnB1c2hfYmFjayh7UiwgMSwgan0pOwogICAgICAgIHF1ZXJpZXNbVF0ucHVzaF9iYWNrKHtMIC0gMSwgLTEsIGp9KTsKICAgIH0KCiAgICBCSVQgYml0X1YoTiArIDIpLCBiaXRfeVYoTiArIDIpOwogICAgQklUIGJpdF9EKE4gKyAyKSwgYml0X0NEKE4gKyAyKTsKICAgIHZlY3Rvcjxsb25nIGxvbmc+IGFucyhRLCAwKTsKCiAgICAvLyBTd2VlcC1saW5lIHBhc3Npbmcgb3ZlciB0aW1lIGludGVydmFscyBUCiAgICBmb3IgKGludCBUID0gMDsgVCA8PSBOOyArK1QpIHsKICAgICAgICBmb3IgKGF1dG8mIGV2IDogZXZzW1RdKSB7CiAgICAgICAgICAgIGlmIChldi50eXBlID09IDApIHsKICAgICAgICAgICAgICAgIGJpdF9WLmFkZChldi5wb3MsIGV2LnZhbCk7CiAgICAgICAgICAgICAgICBiaXRfeVYuYWRkKGV2LnBvcywgKF9faW50MTI4X3QpZXYucG9zICogZXYudmFsKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGJpdF9ELmFkZChldi5wb3MsIGV2LnZhbCk7CiAgICAgICAgICAgICAgICBiaXRfQ0QuYWRkKGV2LnBvcywgKF9faW50MTI4X3QpZXYucG9zICogZXYudmFsKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBBbnN3ZXIgYWxsIHN1Yi1xdWVyaWVzIG9mZmxpbmUgYXQgdGhlIGN1cnJlbnQgVCAKICAgICAgICBmb3IgKGF1dG8mIHEgOiBxdWVyaWVzW1RdKSB7CiAgICAgICAgICAgIGlmIChxLlggPT0gMCkgY29udGludWU7CiAgICAgICAgICAgIGxvbmcgbG9uZyBYID0gcS5YOwogICAgICAgICAgICBfX2ludDEyOF90IHJlcyA9IDA7CgogICAgICAgICAgICAvLyBQcmVmaXggZm9ybXVsYXMgZmFjdG9yaW5nIChYICsgMSkgKiBWIC0geSAqIFYgb2Zmc2V0cwogICAgICAgICAgICBfX2ludDEyOF90IHN1bV9WID0gYml0X1YucXVlcnkoWCk7CiAgICAgICAgICAgIF9faW50MTI4X3Qgc3VtX3lWID0gYml0X3lWLnF1ZXJ5KFgpOwogICAgICAgICAgICByZXMgKz0gKFggKyAxKSAqIHN1bV9WIC0gc3VtX3lWOwoKICAgICAgICAgICAgaWYgKFggLSBUID49IDEpIHsKICAgICAgICAgICAgICAgIF9faW50MTI4X3Qgc3VtX0QgPSBiaXRfRC5xdWVyeShYIC0gVCk7CiAgICAgICAgICAgICAgICBfX2ludDEyOF90IHN1bV9DRCA9IGJpdF9DRC5xdWVyeShYIC0gVCk7CiAgICAgICAgICAgICAgICByZXMgKz0gKFggKyAxIC0gVCkgKiBzdW1fRCAtIHN1bV9DRDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHEuc2lnbiA9PSAxKSBhbnNbcS5pZF0gKz0gKGxvbmcgbG9uZylyZXM7CiAgICAgICAgICAgIGVsc2UgYW5zW3EuaWRdIC09IChsb25nIGxvbmcpcmVzOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBqID0gMDsgaiA8IFE7ICsraikgewogICAgICAgIGNvdXQgPDwgYW5zW2pdIDw8ICJcbiI7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=