#include <bits/stdc++.h>

#define rep(i,n) for(int i=0;i<(n);i++)

using namespace std;

vector<vector<int>> seg;

int query(int l,int r,int u,int a,int b){
	if(l<=a && b<=r) return lower_bound(seg[u].begin(),seg[u].end(),l)-seg[u].begin();

	int res=0;
	if(l<(a+b)/2) res+=query(l,r,2*u+1,a,(a+b)/2);
	if((a+b)/2<r) res+=query(l,r,2*u+2,(a+b)/2,b);
	return res;
}

int main(){
	int n,q; scanf("%d%d",&n,&q);
	vector<int> a(n);
	rep(i,n) scanf("%d",&a[i]), a[i]--;

	vector<int> pre(n,-1);
	rep(i,n){
		int x=a[i];
		a[i]=pre[x];
		pre[x]=i;
	}

	int N;
	for(N=1;N<n;N<<=1);
	seg.resize(2*N-1);
	rep(i,n) seg[N-1+i].emplace_back(a[i]);
	for(int i=N-2;i>=0;i--){
		merge(seg[2*i+1].begin(),seg[2*i+1].end(),
			  seg[2*i+2].begin(),seg[2*i+2].end(),
			  back_inserter(seg[i]));
	}

	rep(_,q){
		int l,r; scanf("%d%d",&l,&r); l--;
		printf("%d\n",query(l,r,0,0,N));
	}

	return 0;
}
