#include <bits/stdc++.h>
using namespace std;

#define rep(i,x,y) for(int i=(x);i<(y);++i)
#define debug(x) #x << "=" << (x)

#ifdef DEBUG
#define _GLIBCXX_DEBUG
#define print(x) std::cerr << debug(x) << " (L:" << __LINE__ << ")" << std::endl
#else
#define print(x)
#endif

const int inf=1e9;
const int64_t inf64=1e18;
const double eps=1e-9;

template <typename T> ostream &operator<<(ostream &os, const vector<T> &vec){
    os << "[";
    for (const auto &v : vec) {
    	os << v << ",";
    }
    os << "]";
    return os;
}

using i64=int64_t;

template<class T> class segtree_sum{
public:
    int n,size_;
    vector<T> dat,sum; //区間の和,区間に一様に足された値
    segtree_sum()=default;
    segtree_sum(int size,T x){ init(size,x); }
    void init(int size,T x){
        size_=size;
        n=1;
        while(n<size_) n*=2;
        dat.assign(2*n-1,0);
        sum.assign(2*n-1,0);
        add(0,size,x);
    }
    int size()const{ return size_; }
    void add(int a,int b,T x){ add(a,b,x,0,0,n); }
    T add(int a,int b,T x,int k,int l,int r){
        if(b<=l or r<=a) return dat[k];
        if(a<=l and r<=b){
            sum[k]+=x;
            return dat[k]+=x*(r-l);
        }
        int m=(l+r)/2;
        return dat[k]=add(a,b,x,2*k+1,l,m)+add(a,b,x,2*k+2,m,r)+sum[k]*(r-l);
    }
    T query(int a,int b){ return query(a,b,0,0,n); }
    T query(int a,int b,int k,int l,int r){
        if(b<=l or r<=a) return 0;
        if(a<=l and r<=b) return dat[k];
        int m=(l+r)/2;
        return query(a,b,2*k+1,l,m)+query(a,b,2*k+2,m,r)+sum[k]*(min(r,b)-max(l,a));
    }
    T at(int i){
        return query(i,i+1,0,0,n);
    }
};

template<class T> class segtree_max{
public:
    int n;
    vector<T> dat,sum; //区間の和,区間に一様に足された値
    segtree_max(int size,T x){
        n=1;
        while(n<size) n*=2;
        dat.assign(2*n-1,0);
        sum.assign(2*n-1,0);
        add(0,size,x);
    }
    void add(int a,int b,T x){ add(a,b,x,0,0,n); }
    T add(int a,int b,T x,int k,int l,int r){
        if(b<=l or r<=a) return dat[k];
        if(a<=l and r<=b){
            sum[k]+=x;
            return dat[k]+=x;
        }
        int m=(l+r)/2;
        return dat[k]=max(add(a,b,x,2*k+1,l,m),add(a,b,x,2*k+2,m,r))+sum[k];
    }
    T query(int a,int b){ return query(a,b,0,0,n); }
    T query(int a,int b,int k,int l,int r){
        if(b<=l or r<=a) return -inf64;
        if(a<=l and r<=b) return dat[k];
        int m=(l+r)/2;
        return max(query(a,b,2*k+1,l,m),query(a,b,2*k+2,m,r))+sum[k];
    }

    T ad(int i){
        return query(i,i+1,0,0,n);
    }
};


void solve(){
    int X,K;
    cin >> X >> K;

    vector<int> r(K);
    rep(i,0,K) cin >> r[i];

    vector<int> x1(K),x2(K),y(K);
    x1[0]=min(r[0],X);
    x2[0]=X;
    rep(i,1,K){
        int d=r[i]-r[i-1];
        if(i%2==0){
            if(y[i-1]+(x2[i-1]-x1[i-1])-d<=0) x1[i]=x2[i]=y[i]=0;
            else if(y[i-1]-d<=0){
                x1[i]=x1[i-1]-(y[i-1]-d);
                x2[i]=x2[i-1];
                y[i]=0;
            }else{
                x1[i]=x1[i-1];
                x2[i]=x2[i-1];
                y[i]=y[i-1]-d;
            }
        }else{
            if(y[i-1]+d>=X) x1[i]=x2[i]=y[i]=X;
            else if(y[i-1]+(x2[i-1]-x1[i-1])+d>=X){
                x1[i]=x1[i-1];
                x2[i]=x2[i-1]-(y[i-1]+(x2[i-1]-x1[i-1])+d-X);
                y[i]=y[i-1]+d;
            }else{
                x1[i]=x1[i-1];
                x2[i]=x2[i-1];
                y[i]=y[i-1]+d;
            }
        }
    }

    int Q;
    cin >> Q;
    rep(i,0,Q){
        int t,a;
        cin >> t >> a;
        if(t<=r[0]) cout << max(a-t,0) << endl;
        else{
            int j=upper_bound(r.begin(),r.end(),t)-r.begin()-1;
            int ans;
            if(a<x1[j]) ans=y[j];
            else if(a<x2[j]) ans=y[j]+(a-x1[j]);
            else ans=y[j]+(x2[j]-x1[j]);
            if(j%2==0) ans=min(ans+t-r[j],X);
            else ans=max(ans-(t-r[j]),0);
            cout << ans << endl;
        }
    }
}

int main(){
    std::cin.tie(0);
    std::ios::sync_with_stdio(false);
    cout.setf(ios::fixed);
    cout.precision(16);
    solve();
    return 0;
}


Measured memory_bytes: 2816