// http://stackoverflow.com/questions/38781428/how-do-you-solve-the-given-scenario-with-given-memory-constraints/38785766#38785766
//
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
ll calc_in_range(ll pivot, const vector<ll> &p){
int n = p.size();
ll total = 0;
for(int i = 0; i < n; i++){
if (i == 0) total += static_cast<ll>(upper_bound(p.begin(), p.end(), pivot)-p.begin());
else total += static_cast<ll>(upper_bound(p.begin() + i, p.end(), pivot + p[i-1]) - p.begin() - i);
}
return total;
}
ll calc_sum(ll pivot, const vector<ll> &p, const vector<ll> &pp){
int n = p.size();
ll sum = 0;
int index;
for(int i = 0; i < n; i++){
if (i == 0) index = static_cast<ll>(upper_bound(p.begin(), p.end(), pivot)-p.begin());
else index = static_cast<ll>(upper_bound(p.begin() + i, p.end(), pivot + p[i-1]) - p.begin() - i);
index--;
if (index == -1) continue;
if (i == 0) sum += pp[index];
else {
ll shift = p[i-1];
sum += pp[index+i]-pp[i-1]-shift*(index+1);
}
}
return sum;
}
ll find_x(int a, const vector<ll> &p, const vector<ll> &pp){
if (a == 0) return 0;
ll answer = 0;
ll l = 1;
ll r = p[p.size()-1];
int offset;
while(l < r){
ll mid = (l+r)/2;
int cand = calc_in_range(mid, p);
if (cand <= a){
l = mid + 1;
offset = a-cand;
}
else {
r = mid;
offset = 0;
}
}
ll pivot = l;
answer += offset * pivot;
pivot--;
answer += calc_sum(pivot, p, pp);
return answer;
}
int main(int argc, char const *argv[])
{
int n, q;
cin >> n >> q;
vector<int> x(n);
vector<ll> p(n); //prefix array
vector<ll> pp(n); //prefix sum of prefix array
ll sum = 0;
for(int i = 0; i < n; i++){
cin >> x[i];
sum += x[i];
p[i] = sum;
if (i == 0) pp[i] = p[i];
else pp[i] = pp[i-1] + p[i];
}
for(int i = 0; i < q; i++){
int a, b;
cin >> a >> b;
ll resa = find_x(a-1, p, pp);
ll resb = find_x(b, p, pp);
cout << (resb - resa) << endl;
}
return 0;
}
Ly8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zODc4MTQyOC9ob3ctZG8teW91LXNvbHZlLXRoZS1naXZlbi1zY2VuYXJpby13aXRoLWdpdmVuLW1lbW9yeS1jb25zdHJhaW50cy8zODc4NTc2NiMzODc4NTc2NgovLyAKCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHZlY3Rvcj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKCmxsIGNhbGNfaW5fcmFuZ2UobGwgcGl2b3QsIGNvbnN0IHZlY3RvcjxsbD4gJnApewoJaW50IG4gPSBwLnNpemUoKTsKCWxsIHRvdGFsID0gMDsKCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspewoJCWlmIChpID09IDApIHRvdGFsICs9IHN0YXRpY19jYXN0PGxsPih1cHBlcl9ib3VuZChwLmJlZ2luKCksIHAuZW5kKCksIHBpdm90KS1wLmJlZ2luKCkpOwoJCWVsc2UgdG90YWwgKz0gc3RhdGljX2Nhc3Q8bGw+KHVwcGVyX2JvdW5kKHAuYmVnaW4oKSArIGksIHAuZW5kKCksIHBpdm90ICsgcFtpLTFdKSAtIHAuYmVnaW4oKSAtIGkpOwoJfQoJcmV0dXJuIHRvdGFsOwp9CgoKbGwgY2FsY19zdW0obGwgcGl2b3QsIGNvbnN0IHZlY3RvcjxsbD4gJnAsIGNvbnN0IHZlY3RvcjxsbD4gJnBwKXsKCWludCBuID0gcC5zaXplKCk7CglsbCBzdW0gPSAwOwoJaW50IGluZGV4OwoJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CgkJaWYgKGkgPT0gMCkgaW5kZXggPSBzdGF0aWNfY2FzdDxsbD4odXBwZXJfYm91bmQocC5iZWdpbigpLCBwLmVuZCgpLCBwaXZvdCktcC5iZWdpbigpKTsKCQllbHNlIGluZGV4ID0gc3RhdGljX2Nhc3Q8bGw+KHVwcGVyX2JvdW5kKHAuYmVnaW4oKSArIGksIHAuZW5kKCksIHBpdm90ICsgcFtpLTFdKSAtIHAuYmVnaW4oKSAtIGkpOwoJCWluZGV4LS07CgkJaWYgKGluZGV4ID09IC0xKSBjb250aW51ZTsKCQlpZiAoaSA9PSAwKSBzdW0gKz0gcHBbaW5kZXhdOwoJCWVsc2UgewoJCQlsbCBzaGlmdCA9IHBbaS0xXTsKCQkJc3VtICs9IHBwW2luZGV4K2ldLXBwW2ktMV0tc2hpZnQqKGluZGV4KzEpOwoJCX0KCX0KCXJldHVybiBzdW07Cn0KCgpsbCBmaW5kX3goaW50IGEsIGNvbnN0IHZlY3RvcjxsbD4gJnAsIGNvbnN0IHZlY3RvcjxsbD4gJnBwKXsKCWlmIChhID09IDApIHJldHVybiAwOwoJbGwgYW5zd2VyID0gMDsKCWxsIGwgPSAxOwoJbGwgciA9IHBbcC5zaXplKCktMV07CglpbnQgb2Zmc2V0OwoJd2hpbGUobCA8IHIpewoJCWxsIG1pZCA9IChsK3IpLzI7CgkJaW50IGNhbmQgPSBjYWxjX2luX3JhbmdlKG1pZCwgcCk7CgkJaWYgKGNhbmQgPD0gYSl7CgkJCWwgPSBtaWQgKyAxOwoJCQlvZmZzZXQgPSBhLWNhbmQ7CgkJfQoJCWVsc2UgewoJCQlyID0gbWlkOwoJCQlvZmZzZXQgPSAwOwoJCX0KCX0KCWxsIHBpdm90ID0gbDsKCWFuc3dlciArPSBvZmZzZXQgKiBwaXZvdDsKCXBpdm90LS07CglhbnN3ZXIgKz0gY2FsY19zdW0ocGl2b3QsIHAsIHBwKTsKCXJldHVybiBhbnN3ZXI7Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICphcmd2W10pCnsKCWludCBuLCBxOwoJY2luID4+IG4gPj4gcTsKCXZlY3RvcjxpbnQ+IHgobik7Cgl2ZWN0b3I8bGw+IHAobik7IC8vcHJlZml4IGFycmF5Cgl2ZWN0b3I8bGw+IHBwKG4pOyAvL3ByZWZpeCBzdW0gb2YgcHJlZml4IGFycmF5CglsbCBzdW0gPSAwOwoJZm9yKGludCBpID0gMDsgaSA8IG47IGkrKyl7CgkJY2luID4+IHhbaV07CgkJc3VtICs9IHhbaV07CgkJcFtpXSA9IHN1bTsKCQlpZiAoaSA9PSAwKSBwcFtpXSA9IHBbaV07CgkJZWxzZSBwcFtpXSA9IHBwW2ktMV0gKyBwW2ldOwoJfQoJZm9yKGludCBpID0gMDsgaSA8IHE7IGkrKyl7CgkJaW50IGEsIGI7CgkJY2luID4+IGEgPj4gYjsKCQlsbCByZXNhID0gZmluZF94KGEtMSwgcCwgcHApOwoJCWxsIHJlc2IgPSBmaW5kX3goYiwgcCwgcHApOwoJCWNvdXQgPDwgKHJlc2IgLSByZXNhKSA8PCBlbmRsOwoJfQoJcmV0dXJuIDA7Cn0K