#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > v;
vector<vector<int> > vv;
vector<vector<long long int> > dp;
void merg(int x) {
  if (v[x].size() == 1) return;
  if (v[x].size() == 2) {
    vector<int> v1;
    v1.push_back(0);
    for (int i = 0; i < v[x * 2].size(); i++) {
      v1.push_back(v[x * 2][i] + v[x][1]);
    }
    v[x] = v1;
    return;
  }
  vector<int> v1 = v[x * 2];
  vector<int> v2 = v[x * 2 + 1];
  for (int i = 0; i < v1.size(); i++) v1[i] += v[x][1];
  for (int i = 0; i < v2.size(); i++) v2[i] += v[x][2];
  v[x].resize(1);
  int idx1 = 0;
  int idx2 = 0;
  while (idx1 < v1.size() && idx2 < v2.size()) {
    if (v1[idx1] < v2[idx2]) {
      v[x].push_back(v1[idx1]);
      idx1++;
    } else {
      v[x].push_back(v2[idx2]);
      idx2++;
    }
  }
  while (idx1 != v1.size()) v[x].push_back(v1[idx1++]);
  while (idx2 != v2.size()) v[x].push_back(v2[idx2++]);
}
int bs(int a, int h, int l, int r) {
  if (l == r) return l;
  int mid = (l + r) / 2;
  if (v[a][mid] > h) return bs(a, h, l, mid);
  if (v[a][mid + 1] > h) return mid;
  return bs(a, h, mid + 1, r);
}
long long int cal(int a, long long int h) {
  if (h < 0) return 0;
  long long int ans = 0;
  int x = bs(a, h, 0, v[a].size() - 1);
  ans = h * ((long long int)(x + 1)) - dp[a][x];
  return ans;
}
int main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(nullptr);
  int n, m;
  cin >> n >> m;
  v.resize(n + 3);
  vv.resize(n + 3);
  dp.resize(n + 3);
  for (int i = 1; i <= n; i++) v[i].push_back(0);
  int x;
  for (int i = 1; i <= n - 1; i++) {
    cin >> x;
    v[(i + 1) / 2].push_back(x);
    vv[(i + 1) / 2].push_back(x);
  }
  for (int i = n; i >= 1; i--) merg(i);
  for (int i = 1; i <= n; i++) {
    dp[i].push_back(v[i][0]);
    for (int j = 1; j < v[i].size(); j++) {
      dp[i].push_back(((long long int)(v[i][j])) + dp[i][j - 1]);
    }
  }
  for (int i = 0; i < m; i++) {
    int a, h;
    cin >> a >> h;
    long long int ans = 0;
    ans += cal(a, h);
    while (a != 1) {
      if (a % 2 == 0) {
        a /= 2;
        if (h - vv[a][0] <= 0) break;
        ans += h - vv[a][0];
        if (vv[a].size() == 2) {
          h = h - vv[a][0] - vv[a][1];
          a = a * 2 + 1;
          ans += cal(a, h);
          a /= 2;
          h += vv[a][1];
        } else {
          h -= vv[a][0];
        }
      } else {
        a /= 2;
        if (h - vv[a][1] <= 0) break;
        ans += h - vv[a][1];
        h = h - vv[a][0] - vv[a][1];
        a = a * 2;
        ans += cal(a, h);
        a /= 2;
        h += vv[a][0];
      }
    }
    cout << ans << endl;
  }
}
