#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define x first
#define y second
#define bg begin()
#define ed end()
#define pb push_back
#define mp make_pair
#define sz(a) int((a).size())
#define R(i,n) for(int i(0);i<(n);++i)
#define L(i,n) for(int i((n)-1);~i;--i)
const int iinf=0x3f3f3f3f;
const ll linf=0x3f3f3f3f3f3f3f3f;
//Data
const int N=1e5;
int n,qn,sq,a[N],rt[N+1];
vector<int> id[N];
//Moqueue
pair<int,int> q[N],*o[N];
int colcnt,seqcnt,cnt[N],ml=0,mr=-1;
multiset<int> st[N];
void ladd(int i=--ml){
// cout<<"ladd(\n";
if(!cnt[a[i]]) colcnt++,seqcnt++;
else {
int d=*upper_bound(id[a[i]].bg,id[a[i]].ed,i)-i;
if(cnt[a[i]]==1) st[a[i]].insert(d);
else {
int t=*st[a[i]].rbegin();
t==*st[a[i]].bg&&t!=d&&(seqcnt--),st[a[i]].insert(d);
}
}
cnt[a[i]]++;
// cout<<")\n";
}
void radd(int i=++mr){
// cout<<"ladd(\n";
if(!cnt[a[i]]) colcnt++,seqcnt++;
else {
int d=i-*prev(lower_bound(id[a[i]].bg,id[a[i]].ed,i));
if(cnt[a[i]]==1) st[a[i]].insert(d);
else {
int t=*st[a[i]].rbegin();
t==*st[a[i]].bg&&t!=d&&(seqcnt--),st[a[i]].insert(d);
}
}
cnt[a[i]]++;
// cout<<")\n";
}
void ldel(int i=ml++){
// cout<<"ldel(\n";
cnt[a[i]]--;
if(!cnt[a[i]]) colcnt--,seqcnt--;
else {
int d=*upper_bound(id[a[i]].bg,id[a[i]].ed,i)-i;
if(cnt[a[i]]==1) st[a[i]].erase(st[a[i]].lower_bound(d));
else {
bool b=(*st[a[i]].rbegin()==*st[a[i]].bg);
st[a[i]].erase(st[a[i]].lower_bound(d));
!b&&(*st[a[i]].rbegin()==*st[a[i]].bg)&&(seqcnt++);
}
}
// cout<<")\n";
}
void rdel(int i=mr--){
// cout<<"rdel(\n";
cnt[a[i]]--;
if(!cnt[a[i]]) colcnt--,seqcnt--;
else {
int d=i-*prev(lower_bound(id[a[i]].bg,id[a[i]].ed,i));
if(cnt[a[i]]==1) st[a[i]].erase(st[a[i]].lower_bound(d));
else {
bool b=(*st[a[i]].rbegin()==*st[a[i]].bg);
st[a[i]].erase(st[a[i]].lower_bound(d));
!b&&(*st[a[i]].rbegin()==*st[a[i]].bg)&&(seqcnt++);
}
}
// cout<<")\n";
}
//Main
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n;
R(i,n) cin>>a[i],--a[i],id[a[i]].pb(i);
cin>>qn,sq=sqrt(qn)+1;
R(i,qn) cin>>q[i].x>>q[i].y,--q[i].x,
--q[i].y,o[i]=&q[i];
sort(o,o+qn,[&](pair<int,int> *u,pair<int,int> *v){
if(u->x/sq!=v->x/sq) return u->x<v->x;
return ((u->x/sq)&1)?u->y<v->y:u->y>v->y;
});
R(i,qn){
while(ml>o[i]->x) ladd();
while(mr<o[i]->y) radd();
while(ml<o[i]->x) ldel();
while(mr>o[i]->y) rdel();
o[i]->x=seqcnt?colcnt:colcnt+1;
}
R(i,qn) cout<<q[i].x<<'\n';
return 0;
}