const long long MOD = 1e9 + 7;
const long long INF = 1e9;
const long long INFLL = 1e18;

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<vector<int> > vvi;
typedef vector<ll> vll;
typedef complex<double> cd;

#define forn(i, n) for (int (i) = 0; (i) != (n); (i)++)
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define popcount(x) __builtin_popcount(x)
#define popcountll(x) __builtin_popcountll(x)
#define fi first
#define se second
#define re return
#define pb push_back
#define uniq(x) sort(all(x)); (x).resize(unique(all(x)) - (x).begin())

#ifdef LOCAL
#define dbg(x) cerr << __LINE__ << " " << #x << " " << x << endl
#define ln cerr << __LINE__ << endl
#else
#define dbg(x) void(0)
#define ln void(0)
#endif // LOCAL

const int N = 200000;

int canL[N], canR[N];

signed main()
{
    srand(time(NULL));
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    ll n, k;
    cin >> n >> k;
    vector<int> x(n + 1);
    forn(i, n) cin >> x[i + 1];
    vector<vector<ll> > goR(20, vector<ll>(n + 2));
    vector<vector<ll> > goL(20, vector<ll>(n + 2));
    vector<vector<ll> > summR(20, vector<ll>(n + 2));
    vector<vector<ll> > summL(20, vector<ll>(n + 2));
    for (int i = 1, j = 1; i <= n; i++)
    {
        while (j <= n && x[j] - x[i] < k)
        {
            j++;
        }
        goR[0][i] = j;
    }
    goR[0][0] = 1;
    goR[0][n + 1] = n + 1;
    summR[0] = goR[0];
    for (int i = n, j = n; i >= 1; i--)
    {
        while (j >= 1 && x[i] - x[j] < k)
        {
            j--;
        }
        goL[0][i] = j;
    }
    goL[0][0] = 0;
    goL[0][n + 1] = n;
    summL[0] = goL[0];
    for (int j = 1; j < 20; j++)
    {
        for (int i = 0; i <= n + 1; i++)
        {
            goR[j][i] = goR[j - 1][goR[j - 1][i]];
            goL[j][i] = goL[j - 1][goL[j - 1][i]];
            summR[j][i] = summR[j - 1][i] + summR[j - 1][goR[j - 1][i]];
            summL[j][i] = summL[j - 1][i] + summL[j - 1][goL[j - 1][i]];
        }
    }
    int q;
    cin >> q;
    while (q--)
    {
        int l, r;
        cin >> l >> r;
        int sz = 1;
        int w = l;
        for (int j = 19; j >= 0; j--)
        {
            int nxt = goR[j][w];
            if (nxt <= r)
            {
                w = nxt;
                sz += (1 << j);
            }
        }
        ll ans = 0;
        {
            ll w = r;
            ll si = r;
            for (int j = 19; j >= 0; j--)
            {
                ll go = goL[j][w];
                if (l <= go)
                {
                    si += summL[j][w];
                    w = go;
                }
            }
            ans += si;
        }
        {
            ll w = l;
            ll si = l;
            for (int j = 19; j >= 0; j--)
            {
                ll go = goR[j][w];
                if (go <= r)
                {
                    si += summR[j][w];
                    w = go;
                }
            }
            ans -= si;
        }
        cout << sz + ans << "\n";
    }
}

/* Note:
Check constants at the beginning of the code (MOD, INF, INFLL)
Check corner cases.
    N = 1
No def int long long for now.
Add something here.
*/


Measured memory_bytes: 130740