#include <bits/stdc++.h>
char ch;
bool fs;
void re(long long &x) {
  while (ch = getchar(), ch < 33)
    ;
  if (ch == '-')
    fs = 1, x = 0;
  else
    fs = 0, x = ch - 48;
  while (ch = getchar(), ch > 33) x = x * 10 + ch - 48;
  if (fs) x = -x;
}
using namespace std;
long long n, m, ans[5000001], s[5000001];
long long cnt, head[5000001], nxt[5000001], a[5000001], b[5000001], c[5000001];
void add(long long u, long long x, long long y, long long z) {
  nxt[++cnt] = head[u];
  head[u] = cnt;
  a[cnt] = x;
  b[cnt] = y;
  c[cnt] = z;
}
void dfs(long long u, long long siz, long long *fa, long long &top) {
  if (u > n) return;
  long long tp[2] = {}, far[2][siz], sum[2][siz];
  sum[0][0] = sum[1][0] = 0;
  dfs(u << 1, siz + 1 >> 1, far[0], tp[0]);
  dfs(u << 1 | 1, siz + 1 >> 1, far[1], tp[1]);
  if (u != 1) {
    for (long long i = 0; i <= 1; ++i)
      for (long long j = 1; j <= tp[i]; ++j) fa[++top] = far[i][j] + s[u];
    fa[++top] = s[u];
  }
  sort(far[0] + 1, far[0] + tp[0] + 1);
  sort(far[1] + 1, far[1] + tp[1] + 1);
  for (long long e = 0; e <= 1; ++e)
    for (long long i = 1; i <= tp[e]; ++i)
      sum[e][i] = sum[e][i - 1] + far[e][i];
  for (long long i = head[u]; i; i = nxt[i]) {
    bool e = c[i];
    long long w =
        upper_bound(far[e] + 1, far[e] + tp[e] + 1, b[i]) - far[e] - 1;
    ans[a[i]] += w * b[i] + b[i] - sum[e][w];
  }
}
int main() {
  re(n), re(m);
  for (long long i = 2; i <= n; ++i) re(s[i]);
  for (long long i = 1; i <= m; ++i) {
    long long x, y;
    re(x), re(y);
    add(x, i, y, 0);
    add(x, i, y, 1);
    ans[i] = -y;
    for (; (x >> 1) && y - s[x] > 0; x >>= 1)
      y -= s[x], add(x >> 1, i, y, x & 1 ^ 1);
  }
  dfs(1, n * 2, ans, n);
  for (long long i = 1; i <= m; ++i) printf("%I64d\n", ans[i]);
}
