#include <bits/stdc++.h>
#define ll long long
#define ft first
#define sc second
#define el '\n'
#define boost ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define file(name) freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout)
#define pb push_back
#define all(x) (x).begin(),(x).end()
using namespace std;
const ll N = 1e6;
ll n, q, block, cnt = 0, a[N + 1], ans[N + 1], blockCnt[N + 1];
vector<ll> b;
ll binary(ll k) {
ll l = 1, r = b.size() - 1, ans = 0;
while(l <= r) {
ll mid = (l + r) >> 1;
if(b[mid] <= k) {
l = mid + 1;
ans = mid;
} else {
r = mid - 1;
}
}
return ans;
}
struct QUERY {
ll x, y, z;
};
vector<QUERY> query;
void read() {
cin >> n >> q;
block = sqrt(n);
b.pb(0);
for(ll i = 1; i <= n; i ++) {
cin >> a[i];
b.pb(a[i]);
}
sort(b.begin() + 1, b.end());
b.erase(unique(b.begin() + 1, b.end()), b.end());
for(ll i = 1; i <= n; i ++) {
a[i] = binary(a[i]);
}
for(ll i = 1; i <= q; i ++) {
ll l, r; cin >> l >> r;
query.pb({l, r, i});
}
sort(all(query), [](QUERY &x, QUERY &y) {
ll rx = x.x / block;
ll ry = y.x / block;
if(rx != ry) return rx < ry;
else {
if(rx % 2) return x.y < y.y;
return x.y > y.y;
}
});
}
void add(ll k) {
blockCnt[a[k]] ++;
if(blockCnt[a[k]] == 2) cnt ++;
if(blockCnt[a[k]] == 3) cnt --;
}
void remove(ll k) {
blockCnt[a[k]] --;
if(blockCnt[a[k]] == 2) cnt ++;
if(blockCnt[a[k]] == 1) cnt --;
}
void solve() {
ll curL = 1, curR = 0;
for(auto [i, j, k] : query) {
while(curL > i) add(-- curL);
while(curL < i) remove(curL ++);
while(curR > j) remove(curR --);
while(curR < j) add(++ curR);
ans[k] = cnt;
}
for(ll i = 1; i <= q; i ++) cout << ans[i] << el;
}
void write() {
}
int main() {
boost;
//file();
read();
solve();
write();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZnQgZmlyc3QKI2RlZmluZSBzYyBzZWNvbmQKI2RlZmluZSBlbCAnXG4nCiNkZWZpbmUgYm9vc3QgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApCiNkZWZpbmUgZmlsZShuYW1lKSBmcmVvcGVuKG5hbWUiLmlucCIsICJyIiwgc3RkaW4pOyBmcmVvcGVuKG5hbWUiLm91dCIsICJ3Iiwgc3Rkb3V0KQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGFsbCh4KSAoeCkuYmVnaW4oKSwoeCkuZW5kKCkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgbGwgTiA9IDFlNjsKbGwgbiwgcSwgYmxvY2ssIGNudCA9IDAsIGFbTiArIDFdLCBhbnNbTiArIDFdLCBibG9ja0NudFtOICsgMV07CnZlY3RvcjxsbD4gYjsKCmxsIGJpbmFyeShsbCBrKSB7CiAgICBsbCBsID0gMSwgciA9IGIuc2l6ZSgpIC0gMSwgYW5zID0gMDsKICAgIHdoaWxlKGwgPD0gcikgewogICAgICAgIGxsIG1pZCA9IChsICsgcikgPj4gMTsKICAgICAgICBpZihiW21pZF0gPD0gaykgewogICAgICAgICAgICBsID0gbWlkICsgMTsKICAgICAgICAgICAgYW5zID0gbWlkOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHIgPSBtaWQgLSAxOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYW5zOwp9CgpzdHJ1Y3QgUVVFUlkgewogICAgbGwgeCwgeSwgejsKfTsKCnZlY3RvcjxRVUVSWT4gcXVlcnk7Cgp2b2lkIHJlYWQoKSB7CiAgICBjaW4gPj4gbiA+PiBxOwogICAgYmxvY2sgPSBzcXJ0KG4pOwogICAgYi5wYigwKTsKCiAgICBmb3IobGwgaSA9IDE7IGkgPD0gbjsgaSArKykgewogICAgICAgIGNpbiA+PiBhW2ldOwogICAgICAgIGIucGIoYVtpXSk7CiAgICB9CgogICAgc29ydChiLmJlZ2luKCkgKyAxLCBiLmVuZCgpKTsKICAgIGIuZXJhc2UodW5pcXVlKGIuYmVnaW4oKSArIDEsIGIuZW5kKCkpLCBiLmVuZCgpKTsKCiAgICBmb3IobGwgaSA9IDE7IGkgPD0gbjsgaSArKykgewogICAgICAgIGFbaV0gPSBiaW5hcnkoYVtpXSk7CiAgICB9CiAgICAKICAgIGZvcihsbCBpID0gMTsgaSA8PSBxOyBpICsrKSB7CiAgICAgICAgbGwgbCwgcjsgY2luID4+IGwgPj4gcjsKICAgICAgICBxdWVyeS5wYih7bCwgciwgaX0pOwogICAgfQoKICAgIHNvcnQoYWxsKHF1ZXJ5KSwgW10oUVVFUlkgJngsIFFVRVJZICZ5KSB7CiAgICAgICAgbGwgcnggPSB4LnggLyBibG9jazsKICAgICAgICBsbCByeSA9IHkueCAvIGJsb2NrOwoKICAgICAgICBpZihyeCAhPSByeSkgcmV0dXJuIHJ4IDwgcnk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmKHJ4ICUgMikgcmV0dXJuIHgueSA8IHkueTsKICAgICAgICAgICAgcmV0dXJuIHgueSA+IHkueTsKICAgICAgICB9CiAgICB9KTsKCn0KCnZvaWQgYWRkKGxsIGspIHsgCiAgICBibG9ja0NudFthW2tdXSArKzsKICAgIGlmKGJsb2NrQ250W2Fba11dID09IDIpIGNudCArKzsKICAgIGlmKGJsb2NrQ250W2Fba11dID09IDMpIGNudCAtLTsKfQoKdm9pZCByZW1vdmUobGwgaykgewogICAgYmxvY2tDbnRbYVtrXV0gLS07CiAgICBpZihibG9ja0NudFthW2tdXSA9PSAyKSBjbnQgKys7CiAgICBpZihibG9ja0NudFthW2tdXSA9PSAxKSBjbnQgLS07Cn0KCnZvaWQgc29sdmUoKSB7CiAgICBsbCBjdXJMID0gMSwgY3VyUiA9IDA7CiAgICBmb3IoYXV0byBbaSwgaiwga10gOiBxdWVyeSkgewogICAgICAgIHdoaWxlKGN1ckwgPiBpKSBhZGQoLS0gY3VyTCk7CiAgICAgICAgd2hpbGUoY3VyTCA8IGkpIHJlbW92ZShjdXJMICsrKTsKICAgICAgICB3aGlsZShjdXJSID4gaikgcmVtb3ZlKGN1clIgLS0pOwogICAgICAgIHdoaWxlKGN1clIgPCBqKSBhZGQoKysgY3VyUik7CgogICAgICAgIGFuc1trXSA9IGNudDsKICAgIH0KCiAgICBmb3IobGwgaSA9IDE7IGkgPD0gcTsgaSArKykgY291dCA8PCBhbnNbaV0gPDwgZWw7Cn0KCnZvaWQgd3JpdGUoKSB7Cgp9CgppbnQgbWFpbigpIHsKICAgIGJvb3N0OwogICAgLy9maWxlKCk7CiAgICByZWFkKCk7CiAgICBzb2x2ZSgpOwogICAgd3JpdGUoKTsKICAgIHJldHVybiAwOwp9