#include<cstdio>
#include<algorithm>
using namespace std;
int n,q, nr;
int arb[1000000];
struct balena
{
int tip;
int idxs;
int idxf;
int idxInit;
}baleie[200010];
struct inde
{
int val;
int idx;
}a[100010];
int rez[100010];
bool fcomp(inde a, inde b)
{
if(a.val - b.val)
{
return a.val < b.val;
}
return a.idx < b.idx;
}
bool fcomp1(balena a, balena b)
{
if(a.idxf - b.idxf)
{
return a.idxf < b.idxf;
}
return a.tip < b.tip;
}
int maxi(int x, int y)
{
if( x > y)
{
return x;
}
return y;
}
void update(int st, int dr, int i, int p, int val)
{
int mij = (st + dr) / 2;
if(st == dr)
{
arb[i] = val;
return ;
}
if(p < mij)
{
update(st, mij, 2 * i, p, val);
}
else
{
update(mij+1, dr, 2 * i +1, p, val);
}
arb[i] = maxi(arb[i*2], arb[i*2+1]);
}
int query(int st, int dr, int i, int p, int q)
{
if(p <= st && dr <= q)
{
return arb[i];
}
int mij = (st+dr) / 2;
int rez1 = 0;
if(p <= mij)
{
rez1 = query(st, mij, i*2, p, q);
}
int rez2 = 0;
if(q > mij)
{
rez2 = query(mij+1, dr, i*2+1, p, q);
}
return maxi(rez1,rez2);
}
int main()
{
freopen("pq.in","r", stdin);
freopen("pq.out","w", stdout);
scanf("%d%d", &n, &q);
for(int i = 1; i<=n; ++i)
{
scanf("%d", &a[i].val);
a[i].idx = i;
}
sort(a+1, a+n+1, fcomp);
for(int i = 1; i<n; ++i)
{
if(a[i].val == a[i+1].val)
{
baleie[++nr].tip = 1;
baleie[nr].idxs = a[i].idx;
baleie[nr].idxf = a[i+1].idx;
}
}
//for(int i = 1; i<n; ++i)
// {
// printf("%d %d %d\n", baleie[i].tip, baleie[i].idxs, baleie[i].idxf);
// }
for(int i = 1; i<= q; ++i)
{
baleie[++nr].tip = 2;
baleie[nr].idxInit = i;
scanf("%d%d", &baleie[nr].idxs,&baleie[nr].idxf);
}
sort(baleie+1, baleie + nr + 1, fcomp1);
for(int i = 1; i<=nr; ++i)
{
if(baleie[i].tip == 1)
{
update(1,n,1, baleie[i].idxs, baleie[i].idxf - baleie[i].idxs);
}
else
{
rez[baleie[i].idxInit] = query(1,n,1, baleie[i].idxs, baleie[i].idxf);
}
}
for(int i = 1; i<=q; ++i)
{
if(rez[i] == 0)
{
printf("-1\n");
}
else
{
printf("%d\n", rez[i]);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}