#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> v[1000000 + 10];
int len[1000000 + 10];
vector<int> p;
vector<long long int> sum[1000000 + 10];
void merge(int x, int y) {
  p.clear();
  int lx = v[x].size();
  int ly = v[y].size();
  int i = 0, j = 0;
  int l = len[y];
  while (i < lx && j < ly) {
    if (v[x][i] > v[y][j] + l) {
      p.push_back(v[y][j] + l);
      j++;
    } else {
      p.push_back(v[x][i]);
      i++;
    }
  }
  while (i < lx) p.push_back(v[x][i++]);
  while (j < ly) p.push_back(v[y][j++] + l);
  v[x].clear();
  for (int z = 0; z < p.size(); z++) v[x].push_back(p[z]);
}
long long int bs(int node, long long int sm) {
  int s = 0, e = v[node].size() - 1;
  int m;
  while (s <= e) {
    m = (s + e) >> 1;
    if (v[node][m] <= sm) {
      s = m + 1;
    } else {
      e = m - 1;
    }
  }
  if (e < 0) return 0;
  return (1ll * sm * (e + 1) - sum[node][e]);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  ;
  int m;
  int t;
  cin >> n >> m;
  for (int i = 1; i <= n; i++) v[i].push_back(0);
  for (int i = 2; i <= n; i++) {
    cin >> t;
    len[i] = t;
  }
  for (int i = n; i > 1; i--) {
    merge(i / 2, i);
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 0; j < v[i].size(); j++) {
      sum[i].push_back(v[i][j]);
      if (j) sum[i][j] += sum[i][j - 1];
    }
  }
  int x;
  long long int y;
  long long int ans = 0;
  while (m--) {
    cin >> x >> y;
    ans = 0;
    int last = 0;
    for (last = 0; x; last = x, y -= len[x], x >>= 1) {
      if (y < 0) break;
      ans += y;
      int lc = x << 1;
      int rc = x << 1 | 1;
      if (lc <= n && last != lc) {
        ans += bs(lc, y - len[lc]);
      }
      if (rc <= n && last != rc) {
        ans += bs(rc, y - len[rc]);
      }
    }
    cout << ans << endl;
  }
  return 0;
}
