#include <bits/stdc++.h>
using namespace std;
const int N = 100004;
int n, q, a[N], freq[N], blockSize, ans[N];
int curAns = 0;
struct Query {
int l, r, idx;
} queryList[N];
void add(int x) {
if (freq[a[x]] == 0) curAns++;
freq[a[x]]++;
}
void remove_(int x) {
freq[a[x]]--;
if (freq[a[x]] == 0) curAns--;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> q;
blockSize = sqrt(n);
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 0; i < q; i++) {
cin >> queryList[i].l >> queryList[i].r;
queryList[i].idx = i;
}
sort(queryList, queryList + q, [](Query x, Query y) {
int bx = x.l / blockSize, by = y.l / blockSize;
if (bx != by) return bx < by;
return (bx & 1) ? x.r > y.r : x.r < y.r;
});
int l = 0, r = -1;
for (int i = 0; i < q; i++) {
int L = queryList[i].l, R = queryList[i].r;
while (r < R) add(++r);
while (r > R) remove_(r--);
while (l < L) remove_(l++);
while (l > L) add(--l);
ans[queryList[i].idx] = curAns;
}
for (int i = 0; i < q; i++) cout << ans[i] << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTiA9IDEwMDAwNDsKaW50IG4sIHEsIGFbTl0sIGZyZXFbTl0sIGJsb2NrU2l6ZSwgYW5zW05dOwppbnQgY3VyQW5zID0gMDsKCnN0cnVjdCBRdWVyeSB7CiAgICBpbnQgbCwgciwgaWR4Owp9IHF1ZXJ5TGlzdFtOXTsKCnZvaWQgYWRkKGludCB4KSB7CiAgICBpZiAoZnJlcVthW3hdXSA9PSAwKSBjdXJBbnMrKzsKICAgIGZyZXFbYVt4XV0rKzsKfQoKdm9pZCByZW1vdmVfKGludCB4KSB7CiAgICBmcmVxW2FbeF1dLS07CiAgICBpZiAoZnJlcVthW3hdXSA9PSAwKSBjdXJBbnMtLTsKfQoKc2lnbmVkIG1haW4oKSB7CiAgICBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwogICAgY2luID4+IG4gPj4gcTsKICAgIGJsb2NrU2l6ZSA9IHNxcnQobik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgY2luID4+IGFbaV07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7IGkrKykgewogICAgICAgIGNpbiA+PiBxdWVyeUxpc3RbaV0ubCA+PiBxdWVyeUxpc3RbaV0ucjsKICAgICAgICBxdWVyeUxpc3RbaV0uaWR4ID0gaTsKICAgIH0KICAgIHNvcnQocXVlcnlMaXN0LCBxdWVyeUxpc3QgKyBxLCBbXShRdWVyeSB4LCBRdWVyeSB5KSB7CiAgICAgICAgaW50IGJ4ID0geC5sIC8gYmxvY2tTaXplLCBieSA9IHkubCAvIGJsb2NrU2l6ZTsKICAgICAgICBpZiAoYnggIT0gYnkpIHJldHVybiBieCA8IGJ5OwogICAgICAgIHJldHVybiAoYnggJiAxKSA/IHguciA+IHkuciA6IHguciA8IHkucjsKICAgIH0pOwoKICAgIGludCBsID0gMCwgciA9IC0xOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBxOyBpKyspIHsKICAgICAgICBpbnQgTCA9IHF1ZXJ5TGlzdFtpXS5sLCBSID0gcXVlcnlMaXN0W2ldLnI7CiAgICAgICAgd2hpbGUgKHIgPCBSKSBhZGQoKytyKTsKICAgICAgICB3aGlsZSAociA+IFIpIHJlbW92ZV8oci0tKTsKICAgICAgICB3aGlsZSAobCA8IEwpIHJlbW92ZV8obCsrKTsKICAgICAgICB3aGlsZSAobCA+IEwpIGFkZCgtLWwpOwogICAgICAgIGFuc1txdWVyeUxpc3RbaV0uaWR4XSA9IGN1ckFuczsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHE7IGkrKykgY291dCA8PCBhbnNbaV0gPDwgJ1xuJzsKfQo=