#include<bits/stdc++.h>
using namespace std;

#define int long long
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; i++)
#define FORD(i, a, b) for (int i = (a), _b = (b); i >= _b; i--)

template<typename X, typename Y> bool chmax(X& a, const Y& b) { return a < b ? a = b, 1 : 0; }
template<typename X, typename Y> bool chmin(X& a, const Y& b) { return a > b ? a = b, 1 : 0; }

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
int Rand(int l, int r) { return uniform_int_distribution<int>(l, r)(rng); }

constexpr int MAXN = 5005;
constexpr int MAXQ = 1e5 + 5;
constexpr int MAXA = 2e6;
constexpr int inf = 1e9 + 67;
constexpr int INF = 1e18 + 67;

int N, Q, A[MAXN];
short freq[2 * MAXA + 5], cnt[MAXN][MAXN]; 
int dp[MAXN][MAXN];

void solve() {
    cin >> N >> Q;
    FOR(i, 1, N) cin >> A[i];
    FOR(l, 1, N) {
        FOR(r, l + 1, N) {
            int T = -(A[l] + A[r]) + MAXA;
            if (T >= 0 && T <= 2 * MAXA) cnt[l][r] = freq[T];
            freq[A[r] + MAXA]++;
        }
        FOR(r, l + 1, N) freq[A[r] + MAXA]--;
    }
    FOR(len, 3, N) FOR(l, 1, N - len + 1) {
        int r = l + len - 1;
        dp[l][r] = dp[l + 1][r] + dp[l][r - 1] - dp[l + 1][r - 1] + cnt[l][r];
    }
    FOR(i, 1, Q) {
        int l, r; cin >> l >> r;
        cout << dp[l][r] << "\n";
    }
}

int32_t main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);

    #define TASK "blizzing_"
    if (fopen(TASK".INP", "r")) {
        freopen(TASK".INP", "r", stdin);
        freopen(TASK".OUT", "w", stdout);
    }

    int tests = 1; // cin >> tests;
    while (tests--) solve();

    #ifdef LOCAL
    cerr << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
    #endif
    return 0;
}
