#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const ll LINF = 1e18;
const int INF = 1e9;
// - Ở bài này các em cũng cố gắng nghĩ ra thuật O(q * n^3) sau đó cố gắng tối ưu xuống O(q * n^2)
// - Sau khi đã có thuật O(q * n^2) thì ta có thể chọn tối ưu tiếp theo 2 hướng là Prefix Sum 2D hoặc DP Range
// (Tham khảo sol bài: H. Queries for Number of Palindromes)
const int N = 5e3 + 5;
const int MAX_A = 1e6;
const int BASE = 1e6;
int n, q;
int a[N];
ll ans[N][N]; // ans[l][r] = Đáp án của đoạn [l, r]
int cnt[MAX_A + BASE + 5];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
// a[i] + a[j] + a[k] = 0
// <=> a[j] = -(a[i] + a[k])
for (int i = 1; i + 1 <= n; i++) {
for (int k = i + 1; k <= n; k++) {
int sum = a[i] + a[k];
if (-MAX_A <= sum && sum <= MAX_A) ans[i][k] = cnt[-sum + BASE];
++cnt[a[k] + BASE];
}
for (int k = i + 1; k <= n; k++) --cnt[a[k] + BASE];
}
for (int l = n - 2; l >= 1; l--) {
for (int r = l + 2; r <= n; r++) ans[l][r] += ans[l + 1][r] + ans[l][r - 1] - ans[l + 1][r - 1];
}
while (q--) {
int l, r;
cin >> l >> r;
cout << ans[l][r] << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOyAKCnR5cGVkZWYgbG9uZyBsb25nIGxsOyAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgCgpjb25zdCBsbCBMSU5GID0gMWUxODsgCmNvbnN0IGludCBJTkYgPSAxZTk7CgovLyAtIOG7niBiw6BpIG7DoHkgY8OhYyBlbSBjxaluZyBj4buRIGfhuq9uZyBuZ2jEqSByYSB0aHXhuq10IE8ocSAqIG5eMykgc2F1IMSRw7MgY+G7kSBn4bqvbmcgdOG7kWkgxrB1IHh14buRbmcgTyhxICogbl4yKQovLyAtIFNhdSBraGkgxJHDoyBjw7MgdGh14bqtdCBPKHEgKiBuXjIpIHRow6wgdGEgY8OzIHRo4buDIGNo4buNbiB04buRaSDGsHUgdGnhur9wIHRoZW8gMiBoxrDhu5tuZyBsw6AgUHJlZml4IFN1bSAyRCBob+G6t2MgRFAgUmFuZ2UKLy8gKFRoYW0ga2jhuqNvIHNvbCBiw6BpOiBILiBRdWVyaWVzIGZvciBOdW1iZXIgb2YgUGFsaW5kcm9tZXMpCmNvbnN0IGludCBOID0gNWUzICsgNTsgCmNvbnN0IGludCBNQVhfQSA9IDFlNjsgCmNvbnN0IGludCBCQVNFID0gMWU2OyAKCmludCBuLCBxOyAKaW50IGFbTl07IApsbCBhbnNbTl1bTl07IC8vIGFuc1tsXVtyXSA9IMSQw6FwIMOhbiBj4bunYSDEkW/huqFuIFtsLCByXQppbnQgY250W01BWF9BICsgQkFTRSArIDVdOwoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCgljaW4gPj4gbiA+PiBxOyAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IGFbaV07IAoKCS8vICAgICBhW2ldICsgYVtqXSArIGFba10gPSAwCgkvLyA8PT4gYVtqXSA9IC0oYVtpXSArIGFba10pCglmb3IgKGludCBpID0gMTsgaSArIDEgPD0gbjsgaSsrKSB7CgkJZm9yIChpbnQgayA9IGkgKyAxOyBrIDw9IG47IGsrKykgewoJCQlpbnQgc3VtID0gYVtpXSArIGFba107IAoJCQlpZiAoLU1BWF9BIDw9IHN1bSAmJiBzdW0gPD0gTUFYX0EpIGFuc1tpXVtrXSA9IGNudFstc3VtICsgQkFTRV07IAoJCQkrK2NudFthW2tdICsgQkFTRV07IAoJCX0KCQlmb3IgKGludCBrID0gaSArIDE7IGsgPD0gbjsgaysrKSAtLWNudFthW2tdICsgQkFTRV07IAoJfQoKCWZvciAoaW50IGwgPSBuIC0gMjsgbCA+PSAxOyBsLS0pIHsKCQlmb3IgKGludCByID0gbCArIDI7IHIgPD0gbjsgcisrKSBhbnNbbF1bcl0gKz0gYW5zW2wgKyAxXVtyXSArIGFuc1tsXVtyIC0gMV0gLSBhbnNbbCArIDFdW3IgLSAxXTsgCgl9CgoJd2hpbGUgKHEtLSkgewoJCWludCBsLCByOyAKCQljaW4gPj4gbCA+PiByOyAKCQljb3V0IDw8IGFuc1tsXVtyXSA8PCAnXG4nOwoJfQp9Cg==