RT
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int long long
const ll MAXN=3e5+5;
ll n,q,a[MAXN],tmp[MAXN];
ll blen;
struct block{
ll l,r;
}b[MAXN];
ll cnt,b_id[MAXN];
ll ans[MAXN];
ll pos_l[MAXN],pos_r[MAXN];
ll _pos_l[MAXN],_pos_r[MAXN];
struct query{
ll l,r,id;
bool operator < (const query &oth)const{
return (l-1)/blen==(oth.l-1)/blen?(r<oth.r):(l-1)/blen<(oth.l-1)/blen;
}
}Q[MAXN];
void add(ll X,ll &num){
pos_l[a[X]]=min(pos_l[a[X]],X);
pos_r[a[X]]=max(pos_r[a[X]],X);
num=max(num,pos_r[a[X]]-pos_l[a[X]]);
return;
}
void del(ll X){
pos_l[a[X]]=1e9,pos_r[a[X]]=0;
return;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
memcpy(tmp,a,sizeof(a));
// for(int i=1;i<=n;i++)cout<<tmp[i]<<" ";
// cout<<'\n';
sort(tmp+1,tmp+1+n);
ll qwq=unique(tmp+1,tmp+1+n)-tmp-1;
// for(int i=1;i<=qwq;i++)cout<<tmp[i]<<" ";
// cout<<'\n';
for(int i=1;i<=n;i++)a[i]=lower_bound(tmp+1,tmp+1+qwq,a[i])-tmp;
// for(int i=1;i<=n;i++)cout<<a[i]<<" ";
// cout<<'\n';
blen=sqrt(n);
for(int i=1;i<=n;i+=blen){
cnt++;
b[cnt]=(block){i,min(i+blen-1,n)};
}
// for(int i=1;i<=cnt;i++)cout<<b[i].l<<" "<<b[i].r<<'\n';
for(int i=1;i<=cnt;i++)for(int j=b[i].l;j<=b[i].r;j++)b_id[j]=i;
cin>>q;
for(int i=1;i<=q;i++){
cin>>Q[i].l>>Q[i].r;
Q[i].id=i;
}
sort(Q+1,Q+1+q);
ll L=1,R=0,lst=0,_L=0;
ll Ans=0,reg=0;
for(int i=1;i<=n;i++)pos_l[i]=_pos_l[i]=1e9,pos_r[i]=_pos_r[i]=0;
for(int i=1;i<=q;i++){
if(b_id[Q[i].l]==b_id[Q[i].r]){
for(ll j=Q[i].l;j<=Q[i].r;j++){
_pos_l[a[j]]=min(_pos_l[a[j]],j);
_pos_r[a[j]]=max(_pos_r[a[j]],j);
ans[Q[i].id]=max(ans[Q[i].id],_pos_r[a[j]]-_pos_l[a[j]]);
}
for(int j=Q[i].l;j<=Q[i].r;j++)_pos_l[a[j]]=1e9,_pos_r[a[j]]=0;
continue;
}
if(b_id[Q[i].l]!=lst){
while(R>b[b_id[Q[i].l]].r)del(R),R--;
while(L<b[b_id[Q[i].l]].r+1)del(L),L++;
Ans=0;
lst=b_id[Q[i].l];
}
while(R<Q[i].r)R++,add(R,Ans);
reg=0;
_L=L;
while(_L>Q[i].l)_L--,add(_L,reg);
ans[Q[i].id]=max(reg,Ans);
while(_L<L)del(_L),_L++;
}
for(int i=1;i<=q;i++)cout<<ans[i]<<'\n';
return 0;
}