#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, q;
cin >> n >> q;
vector<int> skaiciai(n);
for(int& i: skaiciai) cin >> i;
vector<int> didziausiasSkaiciusIki(n, -1), maziausiasSkaiciusNuo(n, -1);
vector<int> skaiciaiInPlaceIki(n, 0);
didziausiasSkaiciusIki[0] = skaiciai[0];
skaiciaiInPlaceIki[0] = (skaiciai[0] == 1);
maziausiasSkaiciusNuo[n - 1] = skaiciai[n-1];
for(int i = 1; i < n; i++){
skaiciaiInPlaceIki[i] = skaiciaiInPlaceIki[i - 1] + (int)(skaiciai[i] == i + 1);
didziausiasSkaiciusIki[i] = max(didziausiasSkaiciusIki[i - 1], skaiciai[i]);
}
for(int i = n - 2; i >= 0; i--){
maziausiasSkaiciusNuo[i] = min(skaiciai[i], maziausiasSkaiciusNuo[i+1]);
}
/*for(int i : skaiciaiInPlaceIki) cout << i << " ";
cout << "\n";
for(int i : didziausiasSkaiciusIki) cout << i << " ";
cout << "\n";
for(int i : maziausiasSkaiciusNuo) cout << i << " ";
cout << "\n";*/
while(q--){
int a, b;
cin >> a >> b;
if(a + b <= n){
bool reikiaRikiuotiKaire = false;
if(a > 0) reikiaRikiuotiKaire = (skaiciaiInPlaceIki[a - 1] != a);
bool reikiaRikiuotiDesine = false;
if(b > 0 && b < n)reikiaRikiuotiDesine = (skaiciaiInPlaceIki[n - 1] - skaiciaiInPlaceIki[n - b - 1] != b);
if(b == n) reikiaRikiuotiDesine = (skaiciaiInPlaceIki[n - 1] != n);
bool imanoma = ((skaiciaiInPlaceIki[n - b - 1] - skaiciaiInPlaceIki[a - 1]) == n - a - b) && (maziausiasSkaiciusNuo[n - b] == n - b + 1) && (didziausiasSkaiciusIki[a - 1] == a);
//cout << reikiaRikiuotiKaire << reikiaRikiuotiDesine << imanoma << "\n";
int ans = (int)reikiaRikiuotiDesine + (int)reikiaRikiuotiKaire;
if(!imanoma) ans = -1;
cout << ans << "\n";
continue;
}
int keitimoGreitis = a + b - n;
const int lStarts = 0;
const int lEnds = n - b - 1;
const int rStarts = a;
const int rEnds = n - 1;
const int midStarts = n - b;
const int midEnds = a - 1;
int ltor = 0, ltom = 0, mtol = 0, mtor = 0, rtol = 0, rtom = 0;
bool lNeedsSort = (skaiciaiInPlaceIki[n - b - 1] != n - b);
bool rNeedsSort = (skaiciaiInPlaceIki[n - 1] - skaiciaiInPlaceIki[a-1] != n - a);
for(int i = lStarts; i <= lEnds; i++){
int j = skaiciai[i] - 1;
if(j >= midStarts && j <= midEnds) ltom++;
if(j >= rStarts) ltor++;
}
for(int i = midStarts; i <= midEnds; i++){
int j = skaiciai[i] - 1;
if(j <= lEnds) mtol++;
if(j >= rStarts) mtor++;
}
for(int i = rStarts; i <= rEnds; i++){
int j = skaiciai[i] - 1;
if(j >= midStarts && j <= midEnds) rtom++;
if(j <= lEnds) rtol++;
}
cout << lStarts << " " << lEnds << " " << midStarts << " " << midEnds << " " << rStarts << " " << rEnds << "\n";
cout << ltom << " " << ltor << " " << mtol << " " << mtor << " " << rtol << " " << rtom << "\n";
cout << lNeedsSort << " " << rNeedsSort << "\n";
int lIsstumtiTotal = ltor + ltom;
int rIsstumtiTotal = rtol + rtom;
int LejimuDelL = min((int) lNeedsSort, (lIsstumtiTotal)/keitimoGreitis + (int)(lIsstumtiTotal % keitimoGreitis != 0) )
int RejimuDelL = ltor/keitimoGreitis + (int)(ltor % keitimoGreitis != 0);
int LejimuDelM = mtol/keitimoGreitis + (int) (mtol % keitimoGreitis != 0);
int RejimuDelM = mtor/keitimoGreitis + (int) (mtor % keitimoGreitis != 0);
int RejimuDelR = min((int) rNeedsSort, (rIsstumtiTotal)/keitimoGreitis + (int)(rIsstumtiTotal % keitimoGreitis != 0) )
int LejimuDelR = rtol/keitimoGreitis + (int)(rtol % keitimoGreitis != 0);
int Ejimai = max(LejimuDelL, max(LejimuDelM, LejimuDelR)) + max(RejimuDelL, max(RejimuDelM, RejimuDelR));
if(RejimuDelL != 0 && LejimuDelR != 0) Ejimai++;
cout << Ejimai << "\n";
//cout << keitimoGreitis << " " << reikiaKeistiKaireje << " " << reikiaKeistiDesineje << "\n";
}
}