#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int read(){
int res=0;char ch=getchar();
while(!isdigit(ch)&&ch!=EOF)
ch=getchar();
while(isdigit(ch)){
res=(res<<1)+(res<<3)+(ch-'0');
ch=getchar();
}
return res;
}
int n,m,bl,curl,curr,tot,a[100005],cnt[100005],ans[100005];
struct query{
int l,r,p;
}q[100005];
bool operator<(const query &a,const query &b){
return a.l^b.l ? a.l<b.l : a.l/bl&1 ? a.r>b.r : a.r<b.r;
}
void Add(int k){
if(++cnt[a[k]]==1) ++tot;
}
void Del(int k){
if(--cnt[a[k]]==0) --tot;
}
int main(){
n=read();m=read();bl=(int)sqrt(n);
for(int i=1;i<=n;i++)
a[i]=read();
for(int i=1;i<=m;i++){
q[i].l=read();
q[i].r=read();
q[i].p=i;
}
sort(q+1,q+m+1);
curl=0;curr=-1;tot=0;
for(int i=1;i<=m;i++){
int L=q[i].l,R=q[i].r;
while(curr<R) Add(++curr);
while(curl>L) Add(--curl);
while(curr>R) Del(curr--);
while(curl<L) Del(curl++);
ans[q[i].p]=tot;
}
for(int i=1;i<=m;i++)
cout<<ans[i]<<endl;
return 0;
}