#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define pll pair<ll, ll>
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
const int nmax = 100005;
int n, q;
int a[nmax], dist[nmax], freq[nmax];
int aint[nmax * 4];
vector< pair< int, pair<int, int> > > v;
int ans[nmax];
void query(int node, int st, int dr, int a, int b, int &maxx) {
if (a <= st && dr <= b) {
maxx = max(maxx, aint[node]);
} else {
int mij = (st + dr) / 2;
if (a <= mij)
query(node * 2, st, mij, a, b, maxx);
if (b > mij) {
query(node * 2 + 1, mij + 1, dr, a, b, maxx);
}
}
}
void update(int node, int st, int dr, int pos, int val) {
if (st == dr) {
aint[node] = val;
} else {
int mij = (st + dr) / 2;
if (pos <= mij) {
update(node * 2, st, mij, pos, val);
} else {
update(node * 2 + 1, mij + 1, dr, pos, val);
}
aint[node] = max(aint[node * 2], aint[node * 2 + 1]);
}
}
int main() {
cin.sync_with_stdio(false);
freopen("pq.in", "r", stdin);
freopen("pq.out", "w", stdout);
for (int i = 0; i < nmax * 4; ++i) {
aint[i] = -1;
}
cin >> n >> q;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
if (freq[a[i]] == 0) {
dist[i] = -1;
} else {
dist[i] = freq[ a[i] ] ;
}
freq[a[i]] = i;
}
for (int i = 1; i <= q; ++i) {
int x, y;
cin >> x >> y;
v.pb(mp(y, mp(x, i)));
}
for (int i = 1; i <= n; ++i) {
v.pb(mp(i, mp(0, 0) ));
}
sort(v.begin(), v.end());
for (int i = 0; i < v.size(); ++i) {
int y = v[i].first;
int x = v[i].second.first;
int initPos = v[i].second.second;
if (x == 0) {
if (dist[y] > 0) {
update( 1, 1, n, dist[y], y - dist[y]);
}
} else {
int maxx = -1;
query(1, 1, n, x, y, maxx);
ans[initPos] = maxx;
}
}
for (int i = 1; i <= q; ++i) {
cout << ans[i] << "\n";
}
return 0;
}