#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;
}
