#include <bits/stdc++.h>   using namespace std;   const int MAXN = 1000005;   const int MAXM = 100005;   long long res[MAXM];   vector<int> seq[MAXN];   vector<pair<int, int> > qry[MAXN];   int L[MAXN], A[MAXM], H[MAXM];   int n, m;   int main() {     ios::sync_with_stdio(false);     cin >> n >> m;     for (int i = 2; i <= n; i++) cin >> L[i];     for (int i = 1; i <= m; i++) cin >> A[i] >> H[i];     for (int i = 1; i <= m; i++) {       int a = A[i], h = H[i];       qry[a].push_back(make_pair(h, i));       while (a > 1 && h > 0) {         if ((a ^ 1) <= n && h - L[a] - L[a ^ 1] > 0)           qry[a ^ 1].push_back(make_pair(h - L[a] - L[a ^ 1], i));         if (h - L[a] > 0) res[i] += h - L[a];         h -= L[a], a >>= 1;       }     }     for (int i = n; i >= 1; i--) {       int x = i * 2, y = i * 2 + 1;       seq[i].push_back(0);       if (x <= n && y <= n) {         for (int j = 0; j < seq[x].size(); j++)           seq[i].push_back(seq[x][j] + L[x]);         for (int j = 0; j < seq[y].size(); j++)           seq[i].push_back(seq[y][j] + L[y]);         seq[x].clear(), seq[y].clear();         sort(seq[i].begin(), seq[i].end());       } else if (x <= n) {         for (int j = 0; j < seq[x].size(); j++)           seq[i].push_back(seq[x][j] + L[x]);         seq[x].clear();       }       sort(qry[i].begin(), qry[i].end());       long long sum = 0;       int p = 0;       for (int j = 0; j < seq[i].size(); j++) {         sum += seq[i][j];         while (p != qry[i].size() &&                (j + 1 == seq[i].size() || seq[i][j + 1] > qry[i][p].first)) {           res[qry[i][p].second] += 1ll * (j + 1) * qry[i][p].first - sum;           p++;         }       }     }     for (int i = 1; i <= m; i++) cout << res[i] << endl;     return 0;   }   