#include <bits/stdc++.h>
using namespace std;
template <class T>
void rd(T &ret) {
  ret = 0;
  bool ok = 0, u = 0;
  for (;;) {
    int c = getchar();
    if (c >= '0' && c <= '9')
      ret = (ret << 3) + (ret << 1) + c - '0', ok = 1;
    else if (c == '-')
      u = 1;
    else if (ok) {
      if (u) ret *= -1;
      return;
    }
  }
}
long long pow_mod(long long p, long long n, long long mod) {
  long long ret = 1;
  for (; n; n >>= 1) {
    if (n & 1) ret = ret * p % mod;
    p = p * p % mod;
  }
  return ret;
}
template <class T>
bool chmin(T &a, const T &b) {
  return b < a ? a = b, 1 : 0;
}
template <class T>
bool chmax(T &a, const T &b) {
  return b > a ? a = b, 1 : 0;
}
const int Max = (int)1e9;
const int Max_N = (int)1e6 + 9;
int c[Max_N], clk, d[Max_N * 20], *ds[Max_N], *de[Max_N], *bat;
long long sum[Max_N * 20];
int dfs1(int first, int n) {
  if (first > n) return 0;
  int l1 = dfs1(first << 1, n), l2 = dfs1(first << 1 | 1, n);
  ds[first] = bat;
  bat += 1 + l1 + l2;
  de[first] = bat;
  return l1 + 1 + l2;
}
void merge(int *of, int l1, int s1, int l2, int s2) {
  int i1 = 0, i2 = 0, v1, v2;
  while (i1 < l1 || i2 < l2) {
    v1 = v2 = Max;
    if (i1 < l1) v1 = *(ds[s1] + i1) + c[s1];
    if (i2 < l2) v2 = *(ds[s2] + i2) + c[s2];
    if (v1 < v2) {
      *of = v1;
      ++of;
      ++i1;
    } else {
      *of = v2;
      ++of;
      ++i2;
    }
  }
}
int dfs2(int first, int n) {
  if (first > n) return 0;
  int l1 = dfs2(first << 1, n), l2 = dfs2(first << 1 | 1, n);
  *ds[first] = 0;
  merge(ds[first] + 1, l1, first << 1, l2, first << 1 | 1);
  return l1 + l2 + 1;
}
long long get_sum(int first, int l) {
  int *p = lower_bound(ds[first], de[first], l);
  if (p == ds[first]) return 0;
  int num = p - ds[first];
  return 1ll * l * num - sum[p - d - 1];
}
long long calc(int first, int l) {
  long long s = 0;
  int last = -1;
  while (first > 0 && l >= 0) {
    s += get_sum(first, l);
    if (~last) {
      s -= get_sum(last, l - c[last]);
    }
    last = first;
    l -= c[last];
    first >>= 1;
  }
  return s;
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = (2); i < (n + 1); i++) scanf("%d", c + i);
  bat = d;
  dfs1(1, n);
  dfs2(1, n);
  for (int i = (1); i < (n + 1); i++) {
    int *p = ds[i];
    long long *is = &sum[p - d];
    *is = *p;
    ++is;
    ++p;
    for (; p != de[i]; ++p, ++is) {
      *is = *(is - 1) + (*p);
    }
  }
  while (m--) {
    int first, q;
    scanf("%d%d", &first, &q);
    long long ans = calc(first, q);
    printf("%lld\n", ans);
  }
  return 0;
}
