#include <fstream>
#include <iostream>
#include <deque>
#include <map>
#include <cstring>
#include <vector>
#include <algorithm>
#define pb push_back
#define NMAX 100005
#define INF 0x3f3f3f3f
using namespace std;
ifstream fin("pq.in");
ofstream fout("pq.out");
int v[NMAX],ai[4*NMAX], last[NMAX], val[NMAX], rez[NMAX];
vector<pair<int, int> > query[NMAX];
void updateAI(int nod, int st, int dr, int pos, int val) {
if(st==dr) {
ai[nod]=max(ai[nod],val);
return;
}
int fs=(nod<<1),mid=(st+dr)>>1;
if(pos<=mid) updateAI(fs,st,mid,pos,val);
else updateAI(fs+1,mid+1,dr,pos,val);
ai[nod]=max(ai[fs],ai[fs+1]);
}
int queryAI(int nod, int st, int dr, int qst, int qdr) {
if(qst>dr || qdr<st) return 0;
if(st>=qst&&dr<=qdr) return ai[nod];
int fs=(nod<<1),mid=(st+dr)>>1;
return max(queryAI(fs,st,mid,qst,qdr), queryAI(fs+1,mid+1,dr,qst,qdr));
}
int main() {
int n,q,dif,i,j,x,y;
fin>>n>>q;
for(i=1;i<=n;++i) fin>>v[i];
for(i=0;i<q;++i) {
fin>>x>>y;
query[y].pb({x,i});
}
for(i=1;i<=n;++i) {
if(last[v[i]]!=0)
updateAI(1,1,n,last[v[i]],i-last[v[i]]);
last[v[i]]=i;
for(j=0;j<query[i].size();++j) rez[query[i][j].second]=queryAI(1,1,n,query[i][j].first,i);
}
for(i=0;i<q;++i) fout<<(rez[i]==0?-1:rez[i])<<'\n';
return 0;
}