#include <bits/stdc++.h>
using namespace std;
const int N = 1e5;
int n, q, a[N + 5], tree[N + 5], qr[N + 5];
vector<tuple<int, int, int>> vqr;
map<int, int> pos;
void update(int i, int x) {
for (; i && i <= n; i += i & -i) { tree[i] += x; }
}
int get(int i) {
int res = 0;
for (; i; i -= i & -i) { res += tree[i]; }
return res;
}
int query(int l, int r) {
return get(r) - get(l - 1);
}
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n >> q;
for (int i = 1; i <= n; i++) { cin >> a[i]; }
for (int i = 1; i <= q; i++) {
int l, r;
cin >> l >> r;
vqr.push_back({r, l, i});
}
sort(vqr.begin(), vqr.end());
int k = 1;
for (auto &[r, l, idx] : vqr) {
for (; k <= r; k++) {
update(pos[a[k]], -1);
update(k, 1);
pos[a[k]] = k;
}
qr[idx] = query(l, r);
}
for (int i = 1; i <= q; i++) { cout << qr[i] << "\n"; }
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAxZTU7CgppbnQgICAgICAgICAgICAgICAgICAgICAgICAgIG4sIHEsIGFbTiArIDVdLCB0cmVlW04gKyA1XSwgcXJbTiArIDVdOwp2ZWN0b3I8dHVwbGU8aW50LCBpbnQsIGludD4+IHZxcjsKbWFwPGludCwgaW50PiAgICAgICAgICAgICAgICBwb3M7Cgp2b2lkIHVwZGF0ZShpbnQgaSwgaW50IHgpIHsKICAgIGZvciAoOyBpICYmIGkgPD0gbjsgaSArPSBpICYgLWkpIHsgdHJlZVtpXSArPSB4OyB9Cn0KCmludCBnZXQoaW50IGkpIHsKICAgIGludCByZXMgPSAwOwogICAgZm9yICg7IGk7IGkgLT0gaSAmIC1pKSB7IHJlcyArPSB0cmVlW2ldOyB9CiAgICByZXR1cm4gcmVzOwp9CgppbnQgcXVlcnkoaW50IGwsIGludCByKSB7CiAgICByZXR1cm4gZ2V0KHIpIC0gZ2V0KGwgLSAxKTsKfQoKaW50IG1haW4oKSB7CiAgICBjaW4udGllKDApLT5zeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4gPj4gbiA+PiBxOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7IGNpbiA+PiBhW2ldOyB9CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBxOyBpKyspIHsKICAgICAgICBpbnQgbCwgcjsKICAgICAgICBjaW4gPj4gbCA+PiByOwogICAgICAgIHZxci5wdXNoX2JhY2soe3IsIGwsIGl9KTsKICAgIH0KICAgIHNvcnQodnFyLmJlZ2luKCksIHZxci5lbmQoKSk7CiAgICBpbnQgayA9IDE7CiAgICBmb3IgKGF1dG8gJltyLCBsLCBpZHhdIDogdnFyKSB7CiAgICAgICAgZm9yICg7IGsgPD0gcjsgaysrKSB7CiAgICAgICAgICAgIHVwZGF0ZShwb3NbYVtrXV0sIC0xKTsKICAgICAgICAgICAgdXBkYXRlKGssIDEpOwogICAgICAgICAgICBwb3NbYVtrXV0gPSBrOwogICAgICAgIH0KICAgICAgICBxcltpZHhdID0gcXVlcnkobCwgcik7CiAgICB9CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBxOyBpKyspIHsgY291dCA8PCBxcltpXSA8PCAiXG4iOyB9Cn0K