#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void gmin(T &x, const T &y) {
  if (x > y) x = y;
}
template <class T>
inline void gmax(T &x, const T &y) {
  if (x < y) x = y;
}
const int BufferSize = 1 << 16;
char buffer[BufferSize], *Bufferhead, *Buffertail;
bool Terminal;
inline char Getchar() {
  if (Bufferhead == Buffertail) {
    int l = fread(buffer, 1, BufferSize, stdin);
    if (!l) {
      Terminal = 1;
      return 0;
    }
    Buffertail = (Bufferhead = buffer) + l;
  }
  return *Bufferhead++;
}
template <class T>
inline bool read(T &x) {
  x = 0;
  char c = Getchar(), rev = 0;
  while (c < '0' || c > '9') {
    c = Getchar();
    rev |= c == '-';
    if (Terminal) return 0;
  }
  while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = Getchar();
  if (c == '.') {
    c = Getchar();
    double t = 0.1;
    while (c >= '0' && c <= '9')
      x = x + (c - '0') * t, c = Getchar(), t = t / 10;
  }
  x = rev ? -x : x;
  return 1;
}
template <class T1, class T2>
inline bool read(T1 &x, T2 &y) {
  return read(x) & read(y);
}
template <class T1, class T2, class T3>
inline bool read(T1 &x, T2 &y, T3 &z) {
  return read(x) & read(y) & read(z);
}
template <class T1, class T2, class T3, class T4>
inline bool read(T1 &x, T2 &y, T3 &z, T4 &w) {
  return read(x) & read(y) & read(z) & read(w);
}
inline bool reads(char *x) {
  char c = Getchar();
  while (c < 33 || c > 126) {
    c = Getchar();
    if (Terminal) return 0;
  }
  while (c >= 33 && c <= 126) (*x++) = c, c = Getchar();
  *x = 0;
  return 1;
}
template <class T>
inline void print(T x, const char c = '\n') {
  if (!x) {
    putchar('0');
    putchar(c);
    return;
  }
  if (x < 0) putchar('-'), x = -x;
  int m = 0, a[20];
  while (x) a[m++] = x % 10, x /= 10;
  while (m--) putchar(a[m] + '0');
  putchar(c);
}
const int inf = 0x3f3f3f3f;
const int N = 100005, M = 100005, mod = 1e9 + 7;
template <class T, class S>
inline void ch(T &x, const S y) {
  x = (x + y) % mod;
}
inline int exp(int x, int y, const int mod = ::mod) {
  int ans = 1;
  while (y) {
    if (y & 1) ans = (long long)ans * x % mod;
    x = (long long)x * x % mod;
    y >>= 1;
  }
  return ans;
}
struct node {
  int t, a, num;
} b[N];
int n, m, B, r[N], a[N];
int p[N << 2], flag[N << 2];
inline void fill(int k, int b) {
  p[k] = b;
  flag[k] = 0;
}
inline void add(int k, int b) { flag[k] += b; }
void build(int l, int r, int k) {
  p[k] = -1;
  if (l == r) {
    p[k] = a[l];
    return;
  }
  int mid = l + r >> 1;
  build(l, mid, (k << 1));
  build(mid + 1, r, (k << 1 | 1));
}
inline void push(int k) {
  if (~p[k]) fill((k << 1), p[k]), fill((k << 1 | 1), p[k]), p[k] = -1;
  if (flag[k]) add((k << 1), flag[k]), add((k << 1 | 1), flag[k]), flag[k] = 0;
}
void fill(int l, int r, int x, int y, int k, int b) {
  if (x <= l && r <= y) {
    fill(k, b);
    return;
  }
  push(k);
  int mid = l + r >> 1;
  if (x <= mid) fill(l, mid, x, y, (k << 1), b);
  if (y > mid) fill(mid + 1, r, x, y, (k << 1 | 1), b);
}
int get(int l, int r, int x, int k) {
  if (l == r) return p[k] + flag[k];
  push(k);
  int mid = l + r >> 1;
  if (x <= mid) return get(l, mid, x, (k << 1));
  return get(mid + 1, r, x, (k << 1 | 1));
}
int main() {
  read(B, n);
  for (int i = 1; i <= n; i++) read(r[i]);
  r[n + 1] = inf;
  read(m);
  for (int i = 1; i <= m; i++) read(b[i].t, b[i].a), a[i] = b[i].a;
  sort(a + 1, a + m + 1);
  build(1, m, 1);
  for (int i = 1; i <= m; i++)
    b[i].a = lower_bound(a + 1, a + m + 1, b[i].a) - a;
  for (int i = 0, j = 1, L = 1, R = m; i <= n; i++) {
    int to = -1;
    if (i & 1) to = 1;
    while (j <= m && b[j].t < r[i + 1])
      print(min(max(0, get(1, m, b[j].a, 1) + to * (b[j].t - r[i])), B)), j++;
    add(1, to * (r[i + 1] - r[i]));
    if (get(1, n, 1, 1) < 0) {
      while (L < m && get(1, m, L + 1, 1) < 0) L++;
      fill(1, m, 1, L, 1, 0);
    } else if (get(1, n, n, 1) > B) {
      while (R > 1 && get(1, n, R - 1, 1) > B) R--;
      fill(1, m, R, m, 1, B);
    }
  }
  return 0;
}
