#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 2e5 + 5;
int n, q;
int a[N];
struct Node {
ll max_subarray, max_pref, max_suf, sum;
Node() {
max_subarray = max_pref = max_suf = sum = 0;
}
Node(ll x) {
max_subarray = max_pref = max_suf = max(0ll, x);
sum = x;
}
Node operator+(const Node& other) const {
Node res;
res.max_subarray = max({max_subarray, other.max_subarray, max_suf + other.max_pref});
res.max_pref = max(max_pref, sum + other.max_pref);
res.max_suf = max(other.max_suf, other.sum + max_suf);
res.sum = sum + other.sum;
return res;
}
};
Node seg[4 * N];
void build(int id, int l, int r) {
if (l == r) {
seg[id] = Node(a[l]);
return;
}
int mid = (l + r) >> 1;
build(id * 2, l, mid);
build(id * 2 + 1, mid + 1, r);
seg[id] = seg[id * 2] + seg[id * 2 + 1];
}
Node get(int id, int l, int r, int u, int v) {
if (l > v || r < u) return Node();
if (u <= l && r <= v) return seg[id];
int mid = (l + r) >> 1;
return get(id * 2, l, mid, u, v) + get(id * 2 + 1, mid + 1, r, u, v);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
build(1, 1, n);
while (q--) {
int l, r;
cin >> l >> r;
Node ans = get(1, 1, n, l, r);
cout << ans.max_subarray << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAyZTUgKyA1OyAKCmludCBuLCBxOyAKaW50IGFbTl07ICAKCnN0cnVjdCBOb2RlIHsKCWxsIG1heF9zdWJhcnJheSwgbWF4X3ByZWYsIG1heF9zdWYsIHN1bTsgIAoKCU5vZGUoKSB7CgkJbWF4X3N1YmFycmF5ID0gbWF4X3ByZWYgPSBtYXhfc3VmID0gc3VtID0gMDsgCgl9CgoJTm9kZShsbCB4KSB7CgkJbWF4X3N1YmFycmF5ID0gbWF4X3ByZWYgPSBtYXhfc3VmID0gbWF4KDBsbCwgeCk7ICAgCgkJc3VtID0geDsgIAoJfQoKCU5vZGUgb3BlcmF0b3IrKGNvbnN0IE5vZGUmIG90aGVyKSBjb25zdCB7CgkJTm9kZSByZXM7IAoJCXJlcy5tYXhfc3ViYXJyYXkgPSBtYXgoe21heF9zdWJhcnJheSwgb3RoZXIubWF4X3N1YmFycmF5LCBtYXhfc3VmICsgb3RoZXIubWF4X3ByZWZ9KTsKCQlyZXMubWF4X3ByZWYgPSBtYXgobWF4X3ByZWYsIHN1bSArIG90aGVyLm1heF9wcmVmKTsgCgkJcmVzLm1heF9zdWYgPSBtYXgob3RoZXIubWF4X3N1Ziwgb3RoZXIuc3VtICsgbWF4X3N1Zik7ICAgCgkJcmVzLnN1bSA9IHN1bSArIG90aGVyLnN1bTsgCgkJcmV0dXJuIHJlczsgICAKCX0KfTsgCgpOb2RlIHNlZ1s0ICogTl07IAoKdm9pZCBidWlsZChpbnQgaWQsIGludCBsLCBpbnQgcikgewoJaWYgKGwgPT0gcikgewoJCXNlZ1tpZF0gPSBOb2RlKGFbbF0pOyAKCQlyZXR1cm47IAoJfQoJaW50IG1pZCA9IChsICsgcikgPj4gMTsgCglidWlsZChpZCAqIDIsIGwsIG1pZCk7IAoJYnVpbGQoaWQgKiAyICsgMSwgbWlkICsgMSwgcik7IAoJc2VnW2lkXSA9IHNlZ1tpZCAqIDJdICsgc2VnW2lkICogMiArIDFdOyAKfQoKTm9kZSBnZXQoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdikgewoJaWYgKGwgPiB2IHx8IHIgPCB1KSByZXR1cm4gTm9kZSgpOyAKCWlmICh1IDw9IGwgJiYgciA8PSB2KSByZXR1cm4gc2VnW2lkXTsgCglpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKCXJldHVybiBnZXQoaWQgKiAyLCBsLCBtaWQsIHUsIHYpICsgZ2V0KGlkICogMiArIDEsIG1pZCArIDEsIHIsIHUsIHYpOyAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgIAkKCWNpbiA+PiBuID4+IHE7ICAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IGFbaV07IAoKCWJ1aWxkKDEsIDEsIG4pOyAKCQoJd2hpbGUgKHEtLSkgewoJCWludCBsLCByOyAKCQljaW4gPj4gbCA+PiByOyAKCQlOb2RlIGFucyA9IGdldCgxLCAxLCBuLCBsLCByKTsgCgkJY291dCA8PCBhbnMubWF4X3N1YmFycmF5IDw8ICdcbic7IAoJfQp9