#include <bits/stdc++.h>
using namespace std;
const int Z = (int)2e6 + 111;
const int inf = (int)1e9 + 111;
const long long llinf = (long long)1e18 + 5;
const int MOD = (int)1e9 + 7;
vector<pair<int, int> > g[Z];
vector<long long> d[Z], pref[Z];
long long f[Z];
void dfs(int v) {
  for (auto to : g[v]) {
    dfs(to.first);
  }
  vector<long long> v1, v2;
  int f = 0;
  for (auto to : g[v]) {
    f++;
    for (int i = 0; i < (int)d[to.first].size(); ++i) {
      if (f % 2) v1.push_back(d[to.first][i] + to.second);
      if (f % 2 == 0) v2.push_back(d[to.first][i] + to.second);
    }
  }
  merge((v1).begin(), (v1).end(), (v2).begin(), (v2).end(),
        back_inserter(d[v]));
  d[v].resize((int)d[v].size() + 1);
  for (int i = (int)d[v].size() - 1; i >= 1; --i) {
    d[v][i] = d[v][i - 1];
  }
  d[v][0] = 0;
}
int main() {
  srand(time(0));
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 1; i < n; ++i) {
    int w;
    scanf("%d", &w);
    g[(i + 1) / 2].push_back(make_pair(i + 1, w));
    f[i + 1] = w;
  }
  dfs(1);
  for (int i = 1; i <= n; ++i) {
    pref[i].resize((int)d[i].size());
    pref[i][0] = d[i][0];
    for (int j = 1; j < (int)d[i].size(); ++j) {
      pref[i][j] = pref[i][j - 1] + d[i][j];
    }
  }
  while (m--) {
    long long v, h;
    scanf("%I64d%I64d", &v, &h);
    int pr = -1;
    long long ans = 0, len = 0;
    while (v) {
      int cntL = --upper_bound((d[2 * v]).begin(), (d[2 * v]).end(),
                               h - len - f[2 * v]) -
                 d[2 * v].begin();
      int cntR = --upper_bound((d[2 * v + 1]).begin(), (d[2 * v + 1]).end(),
                               h - len - f[2 * v + 1]) -
                 d[2 * v + 1].begin();
      if (pr == -1 && cntL != -1)
        ans += 1LL * h * (cntL + 1) - (len + f[2 * v]) * (cntL + 1) -
               pref[2 * v][cntL];
      if (pr == -1 && cntR != -1)
        ans += 1LL * h * (cntR + 1) - (len + f[2 * v + 1]) * (cntR + 1) -
               pref[2 * v + 1][cntR];
      if (pr == 0 && cntL != -1)
        ans += 1LL * h * (cntL + 1) - (len + f[2 * v]) * (cntL + 1) -
               pref[2 * v][cntL];
      if (pr == 1 && cntR != -1)
        ans += 1LL * h * (cntR + 1) - (len + f[2 * v + 1]) * (cntR + 1) -
               pref[2 * v + 1][cntR];
      if (len < h) ans += h - len;
      len += f[v];
      pr = v % 2 ^ 1;
      v /= 2;
    }
    printf("%I64d\n", ans);
  }
  return 0;
}
