#include<fstream>
#include<vector>
#include<algorithm>
#define N 100100
#define MOD 19997
using namespace std;
ifstream f("pq.in");
ofstream g("pq.out");
#define p first
#define s second
#define N 100100
int n,q,i,j,k,x,y,ua[N],aint[N*4],sol[N];
vector<pair<int,int> >inter;
vector<pair<pair<int,int>,int> >qu;
void update(int nod, int li,int ls, int poz, int val)
{
if(li == ls)
{
aint[nod] = val;
return;
}
int mij = (li + ls) >> 1;
if(poz <= mij)
update(nod << 1, li, mij, poz, val);
else
update((nod << 1) | 1, mij + 1, ls, poz, val);
aint[nod] = max(aint[nod << 1], aint[(nod << 1) + 1]);
}
int query(int nod, int li, int ls, int poz)
{
if(ls <= poz)
return aint[nod];
int mij = (li + ls) >> 1;
int rez = query(nod << 1, li, mij, poz);
if(poz > mij)
rez = max(rez, query((nod << 1) + 1, mij + 1, ls, poz));
return rez;
}
int main()
{
f >> n >> q;
for(i = 1; i <= n; ++i)
{
f >> x;
if(ua[x])
inter.push_back(make_pair(ua[x], i));
ua[x] = i;
}
sort(inter.begin(), inter.end());
for(i = 1; i <= q; ++i)
{
f >> x >> y;
qu.push_back(make_pair(make_pair(x, y), i));
}
sort(qu.begin(), qu.end());
j = 0;
k = 0;
for(i = 0; i < q; ++i)
{
x = qu[i].p.p;
y = qu[i].p.s;
while(j < inter.size() && inter[j].p < y)
{
update(1, 1, n, inter[j].s, inter[j].s-inter[j].p);
++j;
}
while(k < j && inter[k].p < x)
{
update(1,1,n, inter[k].s, 0);
++k;
}
sol[qu[i].s] = query(1, 1, n, y);
}
for(i = 1; i <= q; ++i)
if(sol[i] == 0)
g << -1 << '\n';
else
g << sol[i] << '\n';
return 0;
}