#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long unsigned llu;
struct Unos {
  llu dan;
  llu preostalo;
  llu pojedeno;
};
int main() {
  unsigned int n, q;
  cin >> n >> q;
  vector<Unos> podaci(n);
  cin >> podaci[0].dan >> podaci[0].preostalo;
  podaci[0].pojedeno = 0;
  for (unsigned int i = 1; i < n; i++) {
    llu preostalo;
    cin >> podaci[i].dan >> preostalo;
    podaci[i].preostalo = podaci[i - 1].preostalo; 
    llu moglo_biti_pojedeno = podaci[i].dan - podaci[i - 1].dan;
    if (moglo_biti_pojedeno >= podaci[i].preostalo) {
      podaci[i].pojedeno = podaci[i - 1].pojedeno + podaci[i].preostalo;
      podaci[i].preostalo = 0;
    } else {
      podaci[i].pojedeno = podaci[i - 1].pojedeno + moglo_biti_pojedeno;
      podaci[i].preostalo -= moglo_biti_pojedeno;
    }
    podaci[i].preostalo += preostalo;
  }
  vector<llu> pojedeno(n);
  pojedeno[0] = podaci[0].pojedeno;
  for (unsigned int i = 1; i < n; i++) {
    pojedeno[i] = podaci[i].pojedeno;
  }
  for (unsigned int i = 0; i < q; i++) {
    llu k;
    cin >> k;
    int idx = -1;
    for (int j = 0; j < n; j++) {
      if (podaci[j].dan > k) break;
      idx = j;
    }
    if (idx == -1) {
      cout << "0" << endl;
    } else {
      llu max_pojedeno = pojedeno[idx];
      llu moglo_biti_pojedeno = k - podaci[idx].dan + 1;
      cout << max_pojedeno + (moglo_biti_pojedeno >= podaci[idx].preostalo ? podaci[idx].preostalo : moglo_biti_pojedeno) << endl;
    }
  }
  return 0;
}