#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <set>
#include <cstdio>
#define LL long long
#define x first
#define y second
#define mp make_pair
#define DN 250005
using namespace std;
typedef pair<int,int> per;
int n,m,v[DN],ai[4*DN],rz[DN],lst[DN];
vector<per> q[DN];//st,ind
void ins(int vn,int l,int r,int p,int v) {
if(l==r) {
ai[vn]=max(ai[vn],v);
return;
}
int m=(l+r)>>1,fs=(vn<<1);
if(p<=m) ins(fs,l,m,p,v);
else ins(fs+1,m+1,r,p,v);
ai[vn]=max(ai[fs],ai[fs+1]);
}
int qu(int vn,int l,int r,int gl, int gr) {
if(gl<=l && r<=gr) return ai[vn];
if(l==r) return 0;
int m=(l+r)>>1,fs=(vn<<1);
return max(qu(fs,l,m,gl,gr),qu(fs+1,m+1,r,gl,gr));
}
//<parsing>
FILE* fin=fopen("pq.in","r");
const unsigned maxb=30000192;
char buf[maxb];
unsigned ptr=maxb;
inline unsigned getInt(){
unsigned nr=0;
while(buf[ptr]<'0'||'9'<buf[ptr])
if(++ptr>=maxb)
fread(buf,maxb,1,fin),ptr=0;
while('0'<=buf[ptr]&&buf[ptr]<='9'){
nr=nr*10+buf[ptr]-'0';
if(++ptr>=maxb)
fread(buf,maxb,1,fin),ptr=0;
}
return nr;
}
//</parsing>
int main() {
//ifstream f("input.txt");
//ifstream f("pq.in");
ofstream g("pq.out");
n=getInt(); m=getInt();
for(int i=1; i<=n; ++i) v[i]=getInt();
for(int i=0; i<m; ++i) {
int a,b; a=getInt(); b=getInt();
q[b].push_back(mp(a,i));
}
for(int i=1; i<=n; ++i) {
if(lst[v[i]]) {
//cout<<i<<' '<<lst[v[i]]<<'\n';
ins(1,1,n,lst[v[i]],i-lst[v[i]]);
}
lst[v[i]]=i;
for(auto j:q[i]) rz[j.y]=qu(1,1,n,j.x,i);
}
for(int i=0; i<m; ++i) {
if(rz[i]==0) rz[i]=-1;
g<<rz[i]<<'\n';
}
}