#include <bits/stdc++.h>
using namespace std;
template <typename T>
ostream& operator<<(ostream& s, const vector<T>& v) {
  int len = v.size();
  s << "\n";
  for (int i = 0; i < len; ++i) {
    s << v[i];
    if (i < len - 1) s << "\t";
  }
  s << "\n";
  return s;
}
template <class T>
using vv = vector<vector<T> >;
struct State {
  long long a_min, a_max, val_min, val_max;
};
int main() {
  long long x;
  int k;
  scanf("%lld", &x);
  scanf("%d", &k);
  vector<long long> r(k + 1, 0);
  for (int(i) = (0); (i) < (k); ++(i)) {
    scanf("%lld", &r[i + 1]);
  }
  vector<long long> d(k);
  for (int(i) = (0); (i) < (k); ++(i)) {
    d[i] = r[i + 1] - r[i];
  }
  vector<State> vs(k + 1);
  vs[0].a_min = 0;
  vs[0].a_max = x;
  vs[0].val_min = 0;
  vs[0].val_max = x;
  for (int(i) = (1); (i) < (k + 1); ++(i)) {
    long long width = d[i - 1];
    if (i % 2 == 1) {
      long long val_min = vs[i - 1].val_min - width;
      long long val_max = vs[i - 1].val_max - width;
      if (val_min >= 0) {
        vs[i].val_min = val_min;
        vs[i].val_max = val_max;
        vs[i].a_min = vs[i - 1].a_min;
        vs[i].a_max = vs[i - 1].a_min;
      } else if (val_max >= 0) {
        vs[i].val_min = 0;
        vs[i].val_max = val_max;
        vs[i].a_max = vs[i - 1].a_max;
        vs[i].a_min = vs[i].a_max - val_max;
      } else {
        vs[i].val_min = 0;
        vs[i].val_max = 0;
        vs[i].a_min = 0;
        vs[i].a_max = 0;
      }
    } else {
      long long val_min = vs[i - 1].val_min + width;
      long long val_max = vs[i - 1].val_max + width;
      if (val_max <= x) {
        vs[i].val_max = val_max;
        vs[i].val_min = val_min;
        vs[i].a_max = vs[i - 1].a_max;
        vs[i].a_min = vs[i - 1].a_min;
      } else if (val_min <= x) {
        vs[i].val_max = x;
        vs[i].val_min = val_min;
        vs[i].a_min = vs[i - 1].a_min;
        vs[i].a_max = vs[i].a_min + (x - val_min);
      } else {
        vs[i].val_min = x;
        vs[i].val_max = x;
        vs[i].a_min = 0;
        vs[i].a_max = 0;
      }
    }
  }
  int q;
  scanf("%d", &q);
  for (int(i) = (0); (i) < (q); ++(i)) {
    long long t, a;
    scanf("%lld %lld", &t, &a);
    int ub = upper_bound(begin(r), end(r), t) - begin(r) - 1;
    long long val;
    if (a < vs[ub].a_min) {
      val = vs[ub].val_min;
    } else if (vs[ub].a_max < a) {
      val = vs[ub].val_max;
    } else {
      val = vs[ub].val_min + (a - vs[ub].a_min);
    }
    if (ub % 2 == 0) {
      val -= (t - r[ub]);
    } else {
      val += (t - r[ub]);
    }
    if (val > x) {
      val = x;
    } else if (val < 0) {
      val = 0;
    }
    printf("%lld\n", val);
  }
  return 0;
}
