#include <bits/stdc++.h>
using namespace std;
#define int int64_t
const int INF = 1e14;
const int MAXN = 2e5 + 5;
#define pb push_back
#define all(a) a.begin(), a.end()
int n,q;
int solve(vector<int> a, int l, int r, bool turn)
{
if (is_sorted(all(a)))
{
return 0;
}
int res = 0;
for (int i = 0;i <= n;i++)
{
if ((i % 2) ^ turn)
{
sort(a.begin(), a.begin() + l + 1);
}
else
{
sort(a.begin() + r, a.end());
}
res++;
if (is_sorted(all(a)))
{
return res;
}
}
return INF;
}
signed main()
{
cin >> n >> q;
vector<int> a(n);
for (int i = 0;i < n;i++)
{
cin >> a[i];
a[i]--;
}
vector<bool> pref(n, 0);
pref[0] = 0;
for (int i = 1;i < n;i++)
{
if (a[i] < a[i - 1])
{
pref[i] = pref[i - 1] + 1;
}
else
{
pref[i] = pref[i - 1];
}
}
vector<int> pref_mx(n, 0), suf_mx(n, 0);
pref_mx[0] = a[0];
for (int i = 1;i < n;i++)
{
pref_mx[i] = max(pref_mx[i - 1], a[i]);
}
suf_mx[n - 1] = a[n - 1];
for (int i = n - 1;i >= 0;i--)
{
suf_mx[i] = max(suf_mx[i + 1], a[i]);
}
while (q--)
{
int l, r;
cin >> l >> r;
l--;
r = n - r;
int cnt = 0;
if (l < r && pref[r - 1] - pref[l + 2] > 0)
{
cout << -1 << '\n';
continue;
}
int cnt = 0;
if (pref[l] > 0)
{
cnt++;
}
if (pref[n - 1] - pref[r] > 0)
{
cnt++;
}
if (l < r && (a[l + 1] < pref_mx[l] || a[r - 1] > suf_mx[r]))
{
cout << -1 << '\n';
continue;
}
cout << cnt << '\n';
}
return 0;
}