#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000000 + 5;
long long l[maxn];
vector<long long> g[maxn], sum[maxn];
vector<long long> t[2];
int n, m;
long long calc(int a, long long h) {
  if (a > n || h < 0) {
    return 0;
  }
  int pos = lower_bound(g[a].begin(), g[a].end(), h) - g[a].begin();
  if (h == g[a][pos]) {
    pos++;
  }
  return h * pos - sum[a][pos - 1];
}
int main(void) {
  scanf("%d%d", &n, &m);
  for (int i = 2; i <= n; i++) {
    scanf("%lld", &l[i]);
  }
  for (int i = 1; i <= n; i++) {
    g[i].push_back(0);
  }
  for (int i = n; i >= 1; i--) {
    sum[i].resize(g[i].size());
    sum[i][0] = g[i][0];
    for (int j = 1; j < g[i].size(); j++) {
      sum[i][j] = sum[i][j - 1] + g[i][j];
    }
    if (i % 2 == 0) {
      t[0].resize(g[i].size());
      for (int j = 0; j < g[i].size(); j++) {
        t[0][j] = g[i][j] + l[i];
      }
      t[1].resize(g[i + 1].size());
      for (int j = 0; j < g[i + 1].size(); j++) {
        t[1][j] = g[i + 1][j] + l[i + 1];
      }
      g[i / 2].resize(g[i].size() + g[i + 1].size() + 1);
      g[i / 2][0] = 0;
      merge(t[0].begin(), t[0].end(), t[1].begin(), t[1].end(),
            g[i / 2].begin() + 1);
    }
  }
  while (m--) {
    int a;
    long long h;
    scanf("%d%lld", &a, &h);
    long long res = calc(a, h);
    while (a > 1) {
      h -= l[a];
      if (h < 0) {
        break;
      }
      res += h + calc(a ^ 1, h - l[a ^ 1]);
      a >>= 1;
    }
    printf("%lld\n", res);
  }
  return 0;
}
