#include<iostream>
#include<cmath>
#include<vector>
#include<climits>
#include<algorithm>
#include<numeric>
#include<iomanip>
#include<map>
#include<unordered_map>
#include<set>
#include<random>
#include<cassert>
using namespace std;
#define ll long long int
#define ld long double
// MO's Algorithms
struct node{
// for query
ll l; // begin
ll r; // end
ll in ; // index
};
ll cnt=0;
bool cmp(node A, node B)
{
if(A.l == B.l)
{
return (A.r<B.r);
}
return (A.l<B.l);
}
vector<ll> f(1000005,0);
ll beg=1, End=0;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
ll n;
cin>>n;
ll a[n+2];
for(ll i=1;i<=n;i++){cin>>a[i];}
ll q;
cin>>q;
node Q[q+1];
ll ans[n+3] ;
for(ll i=1;i<=q;i++)
{
ll s ,e;
cin>>s>>e;
Q[i].l = s;
Q[i].r=e;
Q[i].in=i;
}
// sort:
sort(Q+1,Q+1+q,cmp);
for(ll i=1;i<=q;i++)
{
ll st = Q[i].l;
ll en = Q[i].r;
// change freq as per req;
while(beg<st)
{
// rem cur
f[a[beg]]--;
if(f[a[beg]]==0){cnt--;}
beg++;
}
while(beg>st)
{
beg--;
f[a[beg]]++;
if(f[a[beg]]==1){cnt++;}
}
while(End<en)
{
End++;
f[a[End]]++;
if(f[a[End]]==1){cnt++;}
}
while(End>en)
{
f[a[End]]--;
if(f[a[End]]==0){cnt--;}
End--;
}
ans[Q[i].in] = cnt ;
}
for(ll i=1;i<=q;i++)
{
cout<<ans[i]<<endl;
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNtYXRoPgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPGNsaW1pdHM+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2luY2x1ZGU8bnVtZXJpYz4KI2luY2x1ZGU8aW9tYW5pcD4KI2luY2x1ZGU8bWFwPgojaW5jbHVkZTx1bm9yZGVyZWRfbWFwPgojaW5jbHVkZTxzZXQ+CiNpbmNsdWRlPHJhbmRvbT4KI2luY2x1ZGU8Y2Fzc2VydD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcgaW50CiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKCi8vIE1PJ3MgQWxnb3JpdGhtcwoKCnN0cnVjdCBub2RlewoJLy8gZm9yIHF1ZXJ5CglsbCBsOyAvLyBiZWdpbgoJbGwgcjsgLy8gZW5kCglsbCBpbiA7IC8vIGluZGV4Cgl9OwpsbCBjbnQ9MDsKCmJvb2wgY21wKG5vZGUgQSwgbm9kZSBCKQp7CmlmKEEubCA9PSBCLmwpCnsKCXJldHVybiAoQS5yPEIucik7Cn0KcmV0dXJuIChBLmw8Qi5sKTsJCn0KCnZlY3RvcjxsbD4gZigxMDAwMDA1LDApOwpsbCBiZWc9MSwgRW5kPTA7CgoKaW50IG1haW4oKQp7Cmlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwpjaW4udGllKE5VTEwpOwkKCmxsIG47CmNpbj4+bjsKbGwgYVtuKzJdOwoKZm9yKGxsIGk9MTtpPD1uO2krKyl7Y2luPj5hW2ldO30KbGwgcTsKY2luPj5xOwpub2RlIFFbcSsxXTsKbGwgYW5zW24rM10gOwpmb3IobGwgaT0xO2k8PXE7aSsrKQp7CglsbCBzICxlOwoJY2luPj5zPj5lOwoJUVtpXS5sID0gczsKCVFbaV0ucj1lOwoJUVtpXS5pbj1pOwp9Ci8vIHNvcnQ6Cgpzb3J0KFErMSxRKzErcSxjbXApOwpmb3IobGwgaT0xO2k8PXE7aSsrKQp7CglsbCBzdCA9IFFbaV0ubDsKCWxsIGVuID0gUVtpXS5yOwoJCgkvLyBjaGFuZ2UgZnJlcSBhcyBwZXIgcmVxOwoJd2hpbGUoYmVnPHN0KQoJewoJLy8gcmVtIGN1ciAKCSBmW2FbYmVnXV0tLTsKCSBpZihmW2FbYmVnXV09PTApe2NudC0tO30KCSBiZWcrKzsKCX0KCXdoaWxlKGJlZz5zdCkKCXsKCWJlZy0tOwkKCWZbYVtiZWddXSsrOwoJaWYoZlthW2JlZ11dPT0xKXtjbnQrKzt9CQoJfQoJCgl3aGlsZShFbmQ8ZW4pCgl7CglFbmQrKzsKCWZbYVtFbmRdXSsrOwoJaWYoZlthW0VuZF1dPT0xKXtjbnQrKzt9CQoJfQoJCgl3aGlsZShFbmQ+ZW4pCgl7CglmW2FbRW5kXV0tLTsKCWlmKGZbYVtFbmRdXT09MCl7Y250LS07fQoJRW5kLS07CQoJfQoKCWFuc1tRW2ldLmluXSA9IGNudCA7Cn0KCmZvcihsbCBpPTE7aTw9cTtpKyspCnsKY291dDw8YW5zW2ldPDxlbmRsOwkKfQoKcmV0dXJuIDA7Cn0K