/*
{By GWj
*/
#pragma GCC optimize(2)
#include<bits/stdc++.h>
#define rb(a,b,c) for(int a=b;a<=c;++a)
#define rl(a,b,c) for(int a=b;a>=c;--a)
#define LL long long
#define IT iterator
#define PB push_back
#define II(a,b) make_pair(a,b)
#define FIR first
#define SEC second
#define FREO freopen("check.out","w",stdout)
#define rep(a,b) for(int a=0;a<b;++a)
#define SRAND mt19937 rng(chrono::steady_clock::now().time_since_epoch().count())
#define random(a) rng()%a
#define ALL(a) a.begin(),a.end()
#define POB pop_back
#define fastio ios::sync_with_stdio(false)
#define R(a) cin>>a
#define R2(a,b) cin>>a>>b
#define check_min(a,b) a=min(a,b)
#define check_max(a,b) a=max(a,b)
using namespace std;
const int INF=0x3f3f3f3f;
typedef pair<int,int> mp;
/*}
*/
int n,k,x[200000+20],q,f[200000+20][19],ff[200000+20][19];
LL s[200000+20][19],ss[200000+20][19];
LL solve(int l,int r){
	int can=0;
	int now=l;
	rl(i,18,0)
		if(f[now][i]<=r) now=f[now][i],can|=1<<i;
	if(can==0) return r-l+1;
	LL one,two;
	one=two=0;
	now=l;
	rl(i,18,0)
		if((can>>i)&1){
			one+=s[now][i];
			now=f[now][i];	
		}
	now=r;
	rl(i,18,0)
		if((can>>i)&1){
			two+=ss[now][i];
			now=ff[now][i];
		}
	one+=l;
	two+=r;
	return two-one+can+1;
}
int main(){
	fastio;
	R2(n,k);
	rb(i,1,n)
		R(x[i]);
	rb(i,1,n+1)
		fill(f[i],f[i]+19,n+1);
	int is=n+1;
	rl(i,n,1){
		while(x[is-1]-x[i]>=k){
			is--;
		}
		f[i][0]=is;
		s[i][0]=is;
	}
	is=0;
	rb(i,1,n){
		while(x[i]-x[is+1]>=k){
			is++;
		}
		ff[i][0]=is;
		ss[i][0]=is;
	}
	rb(i,1,18)
		rb(j,1,n)
			f[j][i]=f[f[j][i-1]][i-1],ff[j][i]=ff[ff[j][i-1]][i-1],s[j][i]=s[f[j][i-1]][i-1]+s[j][i-1],ss[j][i]=ss[ff[j][i-1]][i-1]+ss[j][i-1];
	R(q);
	while(q--){
		int l,r;
		R2(l,r);
		cout<<solve(l,r)<<endl;
	}
	return 0;
}
/** 程序框架：
  * f_{i,j}=f_{f_{i,j-1},j-1}\\
  * s_{i,j}=s_{i,j-1}+s_{f_{i,j-1},j-1}
  * 
  * 
  *
  **/
