#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template <class T> using vec = vector<T>;
template <class T> using vvec = vector<vec<T>>;
template<class T> bool chmin(T& a,T b){if(a>b) {a = b; return true;} return false;}
template<class T> bool chmax(T& a,T b){if(a<b) {a = b; return true;} return false;}
#define all(x) (x).begin(),(x).end()
#define debug(x)  cerr << #x << " = " << (x) << endl;

int main(){
    int N,K;
    cin >> N >> K;
    vec<int> X(N);
    for(auto& x:X) cin >> x;
    int M = 18;
    vvec<ll> left(M,vec<ll>(N,-1)),left_val = left;
    vvec<ll> right(M,vec<ll>(N,N)),right_val = right;
    for(int i=0;i<N;i++){
        int id = lower_bound(all(X),X[i]+K)-X.begin();
        right[0][i] = id;
        right_val[0][i] = id;
        id = upper_bound(all(X),X[i]-K)-X.begin();
        id--;
        left[0][i] = id;
        left_val[0][i] = id;
    }
    for(int k=0;k+1<M;k++) for(int i=0;i<N;i++){
        int ne = right[k][i];
        if(ne!=N){
            right[k+1][i] = right[k][ne];
            right_val[k+1][i] = right_val[k][i]+right_val[k][ne];
        }
        ne = left[k][i];
        if(ne!=-1){
            left[k+1][i] = left[k][ne];
            left_val[k+1][i] = left_val[k][i]+left_val[k][ne];
        }
    }

    auto solve = [&](int l,int r){
        ll a = l;
        int now = l;
        int cnt = 1;
        for(int k=M-1;k>=0;k--){
            if(right[k][now]<=r){
                cnt += 1<<k;
                a += right_val[k][now];
                now = right[k][now];
            }
        }
        ll b = r;
        now = r;
        for(int k=M-1;k>=0;k--){
            if(left[k][now]>=l){
                b += left_val[k][now];
                now = left[k][now];
            }
        }
        cout << b-a+cnt << "\n";
    };

    int Q;
    cin >> Q;
    while(Q--){
        int l,r;
        cin >> l >> r;
        solve(l-1,r-1);
    }
}