#include<bits/stdc++.h>
#define MAXN 1000010
using namespace std;
int a[MAXN],ton[MAXN];
int tree[MAXN<<2];
int n,m;
char gc() {
const int SZ = 1 << 17;
static char buf[SZ], *S, *T;
if(S == T) T = (S = buf) + fread(buf, 1, SZ, stdin);
return S == T ? EOF : *S ++;
}
template<class T>
void read(T &x) {
x = 0; char c = gc(); bool na = 0;
for(; !isdigit(c); c = gc()) na |= c == '-';
for(; isdigit(c); c = gc()) x = x * 10 + (c & 15);
if(na) x = -x;
}
int lowbit(int x){return x&-x;}
void update(int x,int k){
for(int i=x;i<=n;i+=lowbit(i)) tree[i]+=k;
}
int query(int x){
int ans=0;
for(int i=x;i>=1;i-=lowbit(i)){
ans+=tree[i];
}
return ans;
}
void init(){
for(int i=1;i<=n;i++){
if(ton[a[i]]==0){
ton[a[i]]=i;
update(i,1);
}else{
update(ton[a[i]],-1);
ton[a[i]]=i;
update(i,1);
}
}
}
int main(){
read(n);
for(int i=1;i<=n;i++) read(a[i]);
init();
read(m);
for(int i=1;i<=m;i++){
int l,r;
read(l),read(r);
printf("%d\n",query(r)-query(l-1));
}
return 0;
}