#include <bits/stdc++.h>
using namespace std;
const long long N = 2001111;
long long n, m, k;
long long md = 1000000007;
long long a[N];
set<long long> s;
long long len[N];
vector<long long> t[N];
vector<long long> pref[N];
void merge(vector<long long> &t, vector<long long> a, vector<long long> b,
           long long x, long long y) {
  long long i = 0;
  long long j = 0;
  while (i < a.size() && j < b.size()) {
    if (a[i] + x <= b[j] + y) {
      t.push_back(a[i] + x);
      i++;
    } else {
      t.push_back(b[j] + y);
      j++;
    }
  }
  while (i < a.size()) {
    t.push_back(a[i] + x);
    i++;
  }
  while (j < b.size()) {
    t.push_back(b[j] + y);
    j++;
  }
}
void build(long long x) {
  if (x * 2 <= n) {
    build(x * 2);
  }
  if (x * 2 + 1 <= n) {
    build(x * 2 + 1);
  }
  t[x].push_back(0);
  merge(t[x], t[x * 2], t[x * 2 + 1], len[x * 2], len[x * 2 + 1]);
  pref[x].push_back(t[x][0]);
  for (long long i = 1; i < t[x].size(); i++) {
    pref[x].push_back(t[x][i] + pref[x][i - 1]);
  }
}
signed main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> m;
  for (long long i = 2; i <= n; i++) {
    cin >> len[i];
  }
  build(1);
  long long ans = 0;
  for (long long i = 1; i <= m; i++) {
    long long x, h;
    cin >> x >> h;
    long long pos = upper_bound(t[x].begin(), t[x].end(), h) - t[x].begin() - 1;
    ans = ans + (pos + 1) * h - pref[x][pos];
    long long prev = x;
    h -= len[x];
    x /= 2;
    while (x >= 1) {
      if (h <= 0) {
        break;
      }
      ans += h;
      if (x * 2 != prev && x * 2 <= n) {
        h -= len[x * 2];
        pos = upper_bound(t[x * 2].begin(), t[x * 2].end(), h) -
              t[x * 2].begin() - 1;
        if (pos >= 0) ans = ans + (pos + 1) * h - pref[2 * x][pos];
        h += len[x * 2];
      }
      if (x * 2 + 1 != prev && x * 2 + 1 <= n) {
        h -= len[x * 2 + 1];
        pos = upper_bound(t[x * 2 + 1].begin(), t[x * 2 + 1].end(), h) -
              t[x * 2 + 1].begin() - 1;
        if (pos >= 0) ans = ans + (pos + 1) * h - pref[2 * x + 1][pos];
        h += len[x * 2 + 1];
      }
      h -= len[x];
      prev = x;
      x /= 2;
    }
    cout << ans << "\n";
    ans = 0;
  }
  return 0;
}
