#include <bits/stdc++.h>
#define rep(a,b,c) for(auto a = (b); a != (c); a++)
#define repD(a,b,c) for(auto a = (b); a != (c); a--)
#define repIn(a, b) for(auto& a : (b))
#define repIn2(a, b, c) for(auto& [a, b] : (c))
constexpr bool dbg = 0;
#define DEBUG if constexpr(dbg)
#define DC DEBUG std::cerr
#define eol std::endl
#define int long long
#define ld long double
#define pb push_back
#define rg ranges
using namespace std;
constexpr int inf = 1e18;
int n, D, q;
vector<int> a, b, c, ap, ans;
vector<array<int, 3>> queries;
int32_t main() {
ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
cin >> n >> D;
a.resize(n);
b.resize(n);
c.resize(n);
ap.resize(n);
repIn(i, c) cin >> i;
cin >> q;
queries.resize(q);
ans.resize(q);
rep(i, 0, q) cin >> queries[i][0] >> queries[i][1], queries[i][2] = i;
rep(i, 0, n) a[i] = c[i] / D, b[i] = c[i] % D;
rg::sort(queries);
for(auto [l, r, qi] : queries) {
l--, r--;
rep(i, l, r + 1) {
ap[i] = a[i];
rep(j, l + 1, i + 1) ap[i] -= (b[j] < b[j - 1]);
ans[qi] += ap[i];
DC << ap[i] << ' ';
}
DC << eol;
int minSuf = inf;
repD(i, r, l - 1) {
minSuf = min(minSuf, ap[i]);
ans[qi] -= minSuf;
}
if(minSuf < 0) ans[qi] = -1;
}
repIn(i, ans) cout << i << '\n';
}