#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);
int mod=1e9+7;
struct obj
{
int l,r,i,idx;
};
int a[200001];
obj b[200001];
int freq[200001];
int ans[200001];
unordered_map<int,int>cnt;
bool comp(const obj &x, const obj &y)
{
if(x.i<y.i)return true;
if(x.i==y.i)return x.r<y.r;
return false;
}
int32_t main()
{
fast;
cin.tie(NULL);
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int t=1;
// cin>>t;
while(t--)
{
int n,q;
cin>>n>>q;
int curr=1;
for(int i=0;i<n;i++)
{
cin>>a[i];
if(cnt.find(a[i])!=cnt.end())
{
a[i]=cnt[a[i]];
}
else
{
cnt[a[i]]=curr;
a[i]=curr;
curr++;
}
}
int len=555;
for(int i=0;i<q;i++)
{
cin>>b[i].l>>b[i].r;
b[i].l--;
b[i].r--;
b[i].i=(b[i].l)/len;
b[i].idx=i;
}
sort(b,b+q,comp);
// fill(freq,freq+n+1,0);
int distinct=0;
int L=b[0].l;
int R=b[0].l;
freq[a[L]]++;
distinct++;
for(int i=0;i<q;i++)
{
int l=b[i].l;
int r=b[i].r;
// cout<<l<<" "<<r<<" "<<L<<" "<<R<<endl;
while(r>R)
{
R++;
if(freq[a[R]]==0) distinct++;
freq[a[R]]++;
}
while(L>l)
{
L--;
if(freq[a[L]]==0) distinct++;
freq[a[L]]++;
}
while(l>L)
{
freq[a[L]]--;
if(freq[a[L]]==0) distinct--;;
L++;
}
while(R>r)
{
freq[a[R]]--;
if(freq[a[R]]==0) distinct--;
R--;
}
ans[b[i].idx]=distinct;
}
for(int i=0;i<q;i++)
{
cout<<ans[i]<<'\n';
}
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgojZGVmaW5lIGZhc3QgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAKaW50IG1vZD0xZTkrNzsKCnN0cnVjdCBvYmoKewogIGludCBsLHIsaSxpZHg7CiAgIAp9OwoKaW50IGFbMjAwMDAxXTsKb2JqIGJbMjAwMDAxXTsKaW50IGZyZXFbMjAwMDAxXTsKaW50IGFuc1syMDAwMDFdOwp1bm9yZGVyZWRfbWFwPGludCxpbnQ+Y250Owpib29sIGNvbXAoY29uc3Qgb2JqICZ4LCBjb25zdCBvYmogJnkpCnsKICBpZih4Lmk8eS5pKXJldHVybiB0cnVlOwoKICBpZih4Lmk9PXkuaSlyZXR1cm4geC5yPHkucjsKCiAgcmV0dXJuIGZhbHNlOwp9CmludDMyX3QgbWFpbigpCnsKIAogIGZhc3Q7CiAgY2luLnRpZShOVUxMKTsKCiNpZm5kZWYgT05MSU5FX0pVREdFCiAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiAgZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmIAogCiAKaW50IHQ9MTsKLy8gY2luPj50Owp3aGlsZSh0LS0pCnsKCmludCBuLHE7CmNpbj4+bj4+cTsKCgppbnQgY3Vycj0xOwpmb3IoaW50IGk9MDtpPG47aSsrKQp7CiAgY2luPj5hW2ldOwogaWYoY250LmZpbmQoYVtpXSkhPWNudC5lbmQoKSkKIHsKICAgYVtpXT1jbnRbYVtpXV07CiAgCgogfQogZWxzZQogewogICBjbnRbYVtpXV09Y3VycjsKICBhW2ldPWN1cnI7CgogIGN1cnIrKzsKCgogfQogIAp9CgppbnQgbGVuPTU1NTsKZm9yKGludCBpPTA7aTxxO2krKykKewogIGNpbj4+YltpXS5sPj5iW2ldLnI7CiAgYltpXS5sLS07CiAgYltpXS5yLS07CiAgYltpXS5pPShiW2ldLmwpL2xlbjsKICBiW2ldLmlkeD1pOwp9CgoKc29ydChiLGIrcSxjb21wKTsKCgoKLy8gZmlsbChmcmVxLGZyZXErbisxLDApOwppbnQgZGlzdGluY3Q9MDsKaW50IEw9YlswXS5sOwppbnQgUj1iWzBdLmw7CmZyZXFbYVtMXV0rKzsKZGlzdGluY3QrKzsKCgpmb3IoaW50IGk9MDtpPHE7aSsrKQp7CgppbnQgbD1iW2ldLmw7CmludCByPWJbaV0ucjsKLy8gY291dDw8bDw8IiAiPDxyPDwiICI8PEw8PCIgIjw8Ujw8ZW5kbDsKd2hpbGUocj5SKQp7CiAgUisrOwppZihmcmVxW2FbUl1dPT0wKSBkaXN0aW5jdCsrOwpmcmVxW2FbUl1dKys7CiAgICAKCn0Kd2hpbGUoTD5sKQp7CiAgICBMLS07CiAgICBpZihmcmVxW2FbTF1dPT0wKSBkaXN0aW5jdCsrOwogIGZyZXFbYVtMXV0rKzsKCgp9CndoaWxlKGw+TCkKewogIGZyZXFbYVtMXV0tLTsKICBpZihmcmVxW2FbTF1dPT0wKSBkaXN0aW5jdC0tOzsKICBMKys7Cgp9CndoaWxlKFI+cikKewogIGZyZXFbYVtSXV0tLTsKICAgaWYoZnJlcVthW1JdXT09MCkgZGlzdGluY3QtLTsKIFItLTsKfQoKCmFuc1tiW2ldLmlkeF09ZGlzdGluY3Q7CgoKfQoKCmZvcihpbnQgaT0wO2k8cTtpKyspCnsKICBjb3V0PDxhbnNbaV08PCdcbic7Cn0KCn0KCgoKfQ==