#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const double eps = 1e-10;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const long long INFLL = 0x3f3f3f3f3f3f3f3f;
const int MAXN = 1e6 + 5;
int L[MAXN];
int n, m;
vector<long long> v[MAXN];
vector<long long> pre[MAXN];
void dfs(int now, long long d, int fa) {
  v[fa].push_back(d);
  if (now * 2 <= n) dfs(now * 2, d + L[now * 2], fa);
  if (now * 2 + 1 <= n) dfs(now * 2 + 1, d + L[now * 2 + 1], fa);
}
int main() {
  scanf("%d %d", &n, &m);
  for (int i = 2; i <= n; i++) scanf("%d", &L[i]);
  for (int i = 1; i <= n; i++) {
    dfs(i, 0, i);
    sort(v[i].begin(), v[i].end());
    pre[i].push_back(v[i][0]);
    for (int j = 1; j < v[i].size(); j++)
      pre[i].push_back(v[i][j] + pre[i][j - 1]);
  }
  while (m--) {
    int a, h;
    scanf("%d %d", &a, &h);
    long long ans = 0;
    long long dis = 0;
    int pos = lower_bound(v[a].begin(), v[a].end(), h) - v[a].begin() - 1;
    if (pos >= 0 && pos < v[a].size())
      ans += (long long)(pos + 1) * h - pre[a][pos];
    while (a) {
      dis += L[a];
      if (dis < h && a != 1)
        ans += h - dis;
      else
        break;
      int xa = a ^ 1;
      int pos = lower_bound(v[xa].begin(), v[xa].end(), h - dis - L[xa]) -
                v[xa].begin() - 1;
      if (pos >= 0 && pos < v[xa].size())
        ans += (long long)(pos + 1) * h -
               (long long)(dis + L[a ^ 1]) * (pos + 1) - pre[xa][pos];
      a /= 2;
    }
    printf("%lld\n", ans);
  }
}
