#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
const int N = 1000005;
vector<long long> sto[N];
vector<long long> stosm[N];
int a[N], len[N];
void merge(int x, int y) {
  int i = 0, j = 0, k = 0, lx = sto[x].size(), ly = sto[y].size();
  int add = len[y];
  while (i < lx && j < ly) {
    if (sto[x][i] < sto[y][j] + add)
      a[k++] = sto[x][i++];
    else
      a[k++] = sto[y][j++] + add;
  }
  while (i < lx) a[k++] = sto[x][i++];
  while (j < ly) a[k++] = sto[y][j++] + add;
  for (i = 0; i < lx; i++) {
    sto[x][i] = a[i];
  }
  for (i = lx; i < k; i++) sto[x].push_back(a[i]);
}
long long calc(int cur, int lx) {
  int lo = 0, hi = sto[cur].size() - 1, mid;
  while (lo <= hi) {
    mid = (lo + hi) >> 1;
    if (sto[cur][mid] <= lx)
      lo = mid + 1;
    else
      hi = mid - 1;
  }
  if (hi < 0) return 0;
  return 1ll * lx * (hi + 1) - stosm[cur][hi];
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int n, m, i, j, k, las;
  scanf("%d%d", &n, &m);
  for (i = 2; i <= n; i++) scanf("%d", &len[i]);
  for (i = 1; i <= n; i++) sto[i].push_back(0);
  for (i = n; i >= 1; i--) {
    merge(i / 2, i);
  }
  for (i = 1; i <= n; i++) {
    for (j = 0, k = sto[i].size(); j < k; j++) {
      stosm[i].push_back(sto[i][j]);
      if (j) stosm[i][j] += stosm[i][j - 1];
    }
  }
  for (i = 1; i <= m; i++) {
    scanf("%d%d", &j, &k);
    long long cnt = 0;
    for (las = 0; j; k -= len[j], las = j, j >>= 1) {
      if (k < 0) break;
      cnt += k;
      int lt = j << 1, rt = j << 1 | 1;
      if (lt <= n && las != lt) cnt += calc(lt, k - len[lt]);
      if (rt <= n && las != rt) cnt += calc(rt, k - len[rt]);
    }
    printf("%I64d\n", cnt);
  }
  return 0;
}
