#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
long long POW(long long a, long long b, long long MMM = MOD) {
  long long ret = 1;
  for (; b; b >>= 1, a = (a * a) % MMM)
    if (b & 1) ret = (ret * a) % MMM;
  return ret;
}
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long lcm(long long a, long long b) {
  if (a == 0 || b == 0) return a + b;
  return a * (b / gcd(a, b));
}
int dx[] = {0, 1, 0, -1, 1, 1, -1, -1}, dy[] = {1, 0, -1, 0, 1, -1, 1, -1};
long long dist[1000001];
vector<long long> v[2000001], sum[1000001];
int n, q;
void init(int N) {
  if (N > n) return;
  v[N].push_back(dist[N]);
  init(2 * N);
  init(2 * N + 1);
  vector<long long> &v1 = v[2 * N], &v2 = v[2 * N + 1];
  int i = 0, j = 0, nn = v1.size(), mm = v2.size();
  while (1) {
    if (i == nn && j == mm) break;
    if (i == nn)
      v[N].push_back(v2[j++]);
    else if (j == mm)
      v[N].push_back(v1[i++]);
    else if (v1[i] > v2[j])
      v[N].push_back(v2[j++]);
    else
      v[N].push_back(v1[i++]);
  }
}
int main() {
  scanf("%d%d", &n, &q);
  for (int(i) = (1); (i) <= (n - 1); (i) += (1)) {
    long long x;
    scanf("%lld", &x);
    dist[i + 1] = dist[(i + 1) / 2] + x;
  }
  init(1);
  for (int(i) = (1); (i) <= (n); (i) += (1)) {
    sum[i].push_back(0);
    for (int(j) = (0); (j) <= ((int)v[i].size() - 1); (j) += (1))
      sum[i].push_back(sum[i].back() + v[i][j]);
  }
  while (q--) {
    int x;
    long long h;
    scanf("%d%lld", &x, &h);
    long long ans = 0;
    int t = upper_bound(v[x].begin(), v[x].end(), h + dist[x]) - v[x].begin();
    ans += t * (h + dist[x]) - sum[x][t];
    bool L;
    while (1) {
      L = (x % 2 == 0);
      h -= dist[x] - dist[x / 2];
      if (h < 0) break;
      x /= 2;
      if (x == 0) break;
      ans += h;
      if (L) {
        t = upper_bound(v[x * 2 + 1].begin(), v[x * 2 + 1].end(), h + dist[x]) -
            v[x * 2 + 1].begin();
        if (t) ans += t * (h + dist[x]) - sum[x * 2 + 1][t];
      } else {
        t = upper_bound(v[x * 2].begin(), v[x * 2].end(), h + dist[x]) -
            v[x * 2].begin();
        if (t) ans += t * (h + dist[x]) - sum[x * 2][t];
      }
    }
    printf("%lld\n", ans);
  }
}
