#include <bits/stdc++.h>
#define arr3 array <int , 3>
#define pii pair <int , int>
#define fi first
#define se second
#define BIT(x , k) ((x >> k)&1)
#define MASK(x) (1 << x)
#define int long long
#define ull unsigned long long
using namespace std;
const int maxn = 1e6 + 10;
const int INF = 1e18;
int mn[maxn][20] , suma[maxn] , sumc[maxn];
pii jump[maxn][20];
int n , D , c[maxn] , a[maxn] , q , cntD[maxn];
bool valid(int l , int r)
{
int k = __lg(r-l+1);
//cout << min(mn[l][k] , mn[r-(1<<k)+1][k]) << '\n';
int mindiff = min(mn[l][k] , mn[r-(1<<k)+1][k]) + cntD[l]*D;
if(mindiff < 0) return false;
return true;
}
int sum_a(int l , int r) {return (suma[r] - suma[l-1]);}
int sum_c(int l , int r) {return (sumc[r] - sumc[l-1]);}
int sum(int l , int r)
{
int cur = r;
int res = 0;
for(int bit = 19; bit >= 0; bit--)
{
if(jump[cur][bit].fi >= l)
{
res += jump[cur][bit].se;
cur = jump[cur][bit].fi;
}
}
res += (cur - l + 1)*(c[cur] - a[cur]);
res += cntD[l]*(r-l+1);
return res;
}
void solve()
{
cin >> n >> D;
for(int i = 1; i <= n; i++) cin >> c[i];
a[0] = INF;
stack <int> st;
st.push(0);
for(int i = 1; i <= n; i++)
{
cntD[i] = cntD[i-1] + (c[i]%D < c[i-1]%D);
a[i] = cntD[i]*D + c[i]%D;
mn[i][0] = c[i] - a[i];
suma[i] = suma[i-1] + a[i];
sumc[i] = sumc[i-1] + c[i];
while(c[st.top()] - a[st.top()] > c[i] - a[i]) st.pop();
jump[i][0].fi = st.top();
jump[i][0].se = (i - st.top())*(c[i] - a[i]);
st.push(i);
}
for(int j = 1; j < 20; j++)
{
for(int i = 1; i + (1 << j)-1 <= n; i++)
{
mn[i][j] = min(mn[i][j-1] , mn[i+(1<<(j-1))][j-1]);
}
for(int i = 1; i <= n; i++)
{
jump[i][j].fi = jump[jump[i][j-1].fi][j-1].fi;
jump[i][j].se = jump[i][j-1].se + jump[jump[i][j-1].fi][j-1].se;
}
}
cin >> q;
while(q--)
{
int l , r; cin >> l >> r;
if(!valid(l , r)) {cout << -1 << '\n'; continue;}
int ans = sum_c(l , r) - (sum_a(l , r) - cntD[l]*(r-l+1)) - sum(l , r);
cout << ans/D << '\n';
}
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
solve();
return 0;
}