#include <bits/stdc++.h>
#define fi first
#define se second
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define pb push_back
#define MP make_pair
#define FIN freopen("in.txt","r",stdin)
#define fuck(x) cout<<"["<<x<<"]"<<endl
using namespace std;
typedef long long LL;
typedef pair<int,int>pii;
const int mod=1e9+7;
const int MX=1e5+7;
int n,m;
int a[MX],pos[MX];
int num[MX],res;
struct que{
int l,r,id;
int ans;
}q[MX];
bool cmp(que a,que b){
if(pos[a.l]!=pos[b.l]) return a.l<b.l;
return a.r<b.r;
}
void add(int x){
res+=num[x]==0?1:0;
num[x]++;
}
void del(int x){
num[x]--;
res-=num[x]==0?1:0;
}
int main(){
while(~scanf("%d%d",&n,&m)){
memset(num,0,sizeof(num));
res=0;
int block=(int)sqrt(n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
pos[i]=(i-1)ock;
}
for(int i=1;i<=m;i++){
scanf("%d%d",&q[i].l,&q[i].r);
q[i].id=i;
}
sort(q+1,q+m+1,cmp);
int l=0,r=n+1;
for(int i=1;i<=m;i++){
while(r>q[i].r) add(a[--r]);
while(r<q[i].r) del(a[r++]);
while(l<q[i].l) add(a[++l]);
while(l>q[i].l) del(a[l--]);
q[q[i].id].ans=res;
}
for(int i=1;i<=m;i++)
printf("%d
",q[i].ans);
}
return 0;
}