#include<bits/stdc++.h>
using namespace std;
#define INIT ios_base :: sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define mp make_pair
#define pb push_back
#define ft first
#define sc second
#define ll long long
#define pii pair<int, int>
#define count_bits __builtin_popcount
ifstream fin("pq.in"); ofstream fout("pq.out");
#define cin fin
#define cout fout
int n, a[300010], q;
pair<pii, int> qr[100010];
vector<int> col[100010];
int seg[400010];
void build(int v, int tl, int tr){
int mid=(tl+tr)/2;
if(tl==tr){
seg[v]=-1; return;
}
build(2*v, tl, mid); build(2*v+1, mid+1, tr);
seg[v]=max(seg[v*2], seg[2*v+1]);
return;
}
void update(int v, int tl ,int tr, int pos, int val){
int mid=(tl+tr)/2;
if(tl==tr){
seg[v]=val; return;
}
if(pos<=mid){
update(v*2, tl, mid, pos, val);
}
else{
update(2*v+1, mid+1, tr, pos, val);
}
seg[v]=max(seg[v*2], seg[v*2+1]);
return;
}
int query(int v, int tl, int tr, int l, int r){
int res=-1;
if(l>r){return -1;}
int mid=(tl+tr)/2;
if( (tl==l) && (tr==r) ){
return seg[v];
}
res=max(res, query(2*v, tl, mid, l, min(mid, r) ) );
res=max(res, query(2*v+1, mid+1, tr, max(l, mid+1), r) );
return res;
}
int res[100010];
int32_t main(){
INIT
cin>>n>>q;
for(int i=1; i<=n; i++){
cin>>a[i];
}
for(int i=1; i<=q; i++){
cin>>qr[i].ft.ft>>qr[i].ft.sc;
qr[i].sc=i;
}
sort(qr+1, qr+q+1);
build(1, 1, n);
int cr=n+1;
for(int i=q; i>=1; i--){
int l=qr[i].ft.ft, r=qr[i].ft.sc;
while(cr>l){
cr--;
if(col[a[cr] ].size()){
update(1, 1, n, col[a[cr] ].back(), col[a[cr] ].back()-cr);
}
col[a[cr] ].pb(cr);
}
res[qr[i].sc ]=query(1, 1, n, l, r);
}
for(int i=1; i<=q; i++){
cout<<res[i]<<"\n";
}
return 0;
}