#include <bits/stdc++.h>
using namespace std;
# define pb push_back
# define mp make_pair
# define FORN( a , b , c ) for ( int a = b ; a <= c ; ++ a )
# define FORNBACK( a , b , c ) for ( int a = b ; a >= c ; -- a )
const int Nmax = 100001;
int N,M,v[Nmax];
int L[Nmax],Nx[Nmax];
int Ans[Nmax],Y[Nmax];
int A[4*Nmax];
vector<int> Q[Nmax];
void upd(int i,int st,int dr,int w,int val){
if(st>=dr) A[i]=val;
else{
int mij=(st+dr)/2;
if(w<=mij) upd(2*i,st,mij,w,val);
else upd(2*i+1,mij+1,dr,w,val);
A[i]=max(A[2*i],A[2*i+1]);
}
}
int query(int i,int st,int dr,int a,int b){
if(a<=st && dr<=b) return A[i];
int mij=(st+dr)/2;
if(b<=mij) return query(2*i,st,mij,a,b);
if(a>mij) return query(2*i+1,mij+1,dr,a,b);
int aa=query(2*i,st,mij,a,mij);
int bb=query(2*i+1,mij+1,dr,mij+1,b);
return max(aa,bb);
}
int main()
{
ios :: sync_with_stdio ( false ) ;
freopen( "pq.in" , "r" , stdin ) ;
freopen( "pq.out" , "w" , stdout ) ;
cin>>N>>M;
for(int i=1;i<=N;i++) cin>>v[i];
int x;
for(int i=1;i<=M;i++){
cin>>x>>Y[i];
Q[x].push_back(i);
}
for(int i=N;i>=1;i--){
if(L[v[i]]) Nx[i]=L[v[i]];
L[v[i]]=i;
}
for(int i=N;i>=1;i--){
if(Nx[i]){
upd(1,1,N,Nx[i],Nx[i]-i);
}
for(vector<int>::iterator it=Q[i].begin();it!=Q[i].end();++it){
Ans[*it]=query(1,1,N,i,Y[*it]);
}
}
for(int i=1;i<=M;i++){
if(Ans[i]==0) cout<<"-1\n";
else cout<<Ans[i]<<'\n';
}
return 0 ;
}