#include <bits/stdc++.h>
using namespace std;
// #define int long long
const int maxn = 1e6 + 5;
const int mod = 1e9 + 7;
// const int oo = 1e18 + 5;
typedef pair<int, int> ii;
typedef pair<int, pair<int, int>> iii;
#define fi first
#define se second
#define read(_a, n) \
for (int i = 1; i <= n; i++) \
cin >> _a[i]
#define For(i, _a, _b) for (int i = _a; i <= _b; i++)
#define fastIO \
ios_base::sync_with_stdio(false); \
cin.tie(0); \
cout.tie(0);
#define File(_x, _y) \
if (fopen(_x, "r")) \
freopen(_x, "r", stdin), freopen(_y, "w", stdout)
#define file "main"
#define bit(x, i) ((x >> i) & 1)
#define bat(x, i) (x(1 << i))
int n, m, block, res;
int cnt[maxn], ans[maxn], t;
int a[maxn];
set<int> s;
struct query
{
int l;int r;int k;
int id;
} q[maxn];
bool cmp(query a, query b)
{
int pa = a.r / block, pb = b.r / block;
if (pa != pb) return pa < pb;
if (pa % 2 == 0) return a.l < b.l;
else return a.l > b.l;
}
vector<int> b;
int T[maxn];
int N = 3e5;
void update(int p, int v)
{
while(p <= N) T[p] += v, p += p&(-p);
}
int get(int p)
{
int res = 0;
while(p > 0) res += T[p], p -= p&(-p);
return res;
}
void chuyen(int l, int r, int l1, int r1)
{
while (l < l1) // [l, r] -> [l+1, r]
{
int v = a[l++];
if(cnt[v] == 2) res--;
if(cnt[v] == 3) res++;
cnt[v]--;
}
while (r > r1) // [l, r] -> [l, r-1]
{
int v = a[r--];
if(cnt[v] == 2) res--;
if(cnt[v] == 3) res++;
cnt[v]--;
}
while (l > l1) //[l, r] -> [l-1, r]
{
int v = a[--l];
if(cnt[v] == 2) res--;
if(cnt[v] == 1) res++;
cnt[v]++;
}
while (r < r1) //[l, r] -> [l, r+1]
{
int v = a[++r];
if(cnt[v] == 2) res--;
if(cnt[v] == 1) res++;
cnt[v]++;
}
}
void nenso()
{
for (int i : s)
b.push_back(i);
sort(b.begin(), b.end());
for (int i = 1; i <= n; i++)
a[i] = lower_bound(b.begin(), b.end(), a[i]) - b.begin() + 1;
}
int32_t main()
{
fastIO;
File(file ".inp", file ".out");
cin >> n >> t;
while(block * block < n) block++;
for(int i = 1; i <= n; i++) cin >> a[i], s.insert(a[i]);
nenso();
for(int i = 1; i <= t; i++)
{
cin >> q[i].l >> q[i].r;
q[i].id = i;
}
sort(q+1, q+t+1, cmp);
for(int i = 1; i <= t; i++)
{
chuyen(q[i-1].l, q[i-1].r, q[i].l, q[i].r);
ans[q[i].id] = res;
}
for(int i = 1; i <= t; i++) cout << ans[i] << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vICNkZWZpbmUgaW50IGxvbmcgbG9uZwpjb25zdCBpbnQgbWF4biA9IDFlNiArIDU7CmNvbnN0IGludCBtb2QgPSAxZTkgKyA3OwovLyBjb25zdCBpbnQgb28gPSAxZTE4ICsgNTsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsKdHlwZWRlZiBwYWlyPGludCwgcGFpcjxpbnQsIGludD4+IGlpaTsKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIHJlYWQoX2EsIG4pICAgICAgICAgICAgICBcCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIFwKICAgIGNpbiA+PiBfYVtpXQojZGVmaW5lIEZvcihpLCBfYSwgX2IpIGZvciAoaW50IGkgPSBfYTsgaSA8PSBfYjsgaSsrKQojZGVmaW5lIGZhc3RJTyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyBcCiAgICBjaW4udGllKDApOyAgICAgICAgICAgICAgICAgICAgICAgXAogICAgY291dC50aWUoMCk7CiNkZWZpbmUgRmlsZShfeCwgX3kpICAgIFwKICAgIGlmIChmb3BlbihfeCwgInIiKSkgXAogICAgZnJlb3BlbihfeCwgInIiLCBzdGRpbiksIGZyZW9wZW4oX3ksICJ3Iiwgc3Rkb3V0KQojZGVmaW5lIGZpbGUgIm1haW4iCiNkZWZpbmUgYml0KHgsIGkpICgoeCA+PiBpKSAmIDEpCiNkZWZpbmUgYmF0KHgsIGkpICh4KDEgPDwgaSkpCgppbnQgbiwgbSwgYmxvY2ssIHJlczsKaW50IGNudFttYXhuXSwgYW5zW21heG5dLCB0OwppbnQgYVttYXhuXTsKc2V0PGludD4gczsKCnN0cnVjdCBxdWVyeQp7CiAgICBpbnQgbDtpbnQgcjtpbnQgazsKICAgIGludCBpZDsKfSBxW21heG5dOwoKYm9vbCBjbXAocXVlcnkgYSwgcXVlcnkgYikKewogICAgaW50IHBhID0gYS5yIC8gYmxvY2ssIHBiID0gYi5yIC8gYmxvY2s7CiAgICBpZiAocGEgIT0gcGIpIHJldHVybiBwYSA8IHBiOwogICAgaWYgKHBhICUgMiA9PSAwKSByZXR1cm4gYS5sIDwgYi5sOwogICAgZWxzZSByZXR1cm4gYS5sID4gYi5sOwp9Cgp2ZWN0b3I8aW50PiBiOwoKaW50IFRbbWF4bl07CmludCBOID0gM2U1Owp2b2lkIHVwZGF0ZShpbnQgcCwgaW50IHYpCnsKICAgIHdoaWxlKHAgPD0gTikgVFtwXSArPSB2LCBwICs9IHAmKC1wKTsKfQoKaW50IGdldChpbnQgcCkgCnsKICAgIGludCByZXMgPSAwOwogICAgd2hpbGUocCA+IDApIHJlcyArPSBUW3BdLCBwIC09IHAmKC1wKTsKICAgIHJldHVybiByZXM7Cn0KCnZvaWQgY2h1eWVuKGludCBsLCBpbnQgciwgaW50IGwxLCBpbnQgcjEpCnsKICAgIHdoaWxlIChsIDwgbDEpIC8vIFtsLCByXSAtPiBbbCsxLCByXQogICAgewogICAgICAgIGludCB2ID0gYVtsKytdOwogICAgICAgIGlmKGNudFt2XSA9PSAyKSByZXMtLTsKICAgICAgICBpZihjbnRbdl0gPT0gMykgcmVzKys7CiAgICAgICAgY250W3ZdLS07CiAgICB9CiAgICB3aGlsZSAociA+IHIxKSAvLyBbbCwgcl0gLT4gW2wsIHItMV0KICAgIHsKICAgICAgICBpbnQgdiA9IGFbci0tXTsKICAgICAgICBpZihjbnRbdl0gPT0gMikgcmVzLS07CiAgICAgICAgaWYoY250W3ZdID09IDMpIHJlcysrOwogICAgICAgIGNudFt2XS0tOwogICAgfQogICAgd2hpbGUgKGwgPiBsMSkgLy9bbCwgcl0gLT4gW2wtMSwgcl0KICAgIHsKICAgICAgICBpbnQgdiA9IGFbLS1sXTsKICAgICAgICBpZihjbnRbdl0gPT0gMikgcmVzLS07CiAgICAgICAgaWYoY250W3ZdID09IDEpIHJlcysrOwogICAgICAgIGNudFt2XSsrOwogICAgfQogICAgd2hpbGUgKHIgPCByMSkgLy9bbCwgcl0gLT4gW2wsIHIrMV0KICAgIHsKICAgICAgICBpbnQgdiA9IGFbKytyXTsKICAgICAgICBpZihjbnRbdl0gPT0gMikgcmVzLS07CiAgICAgICAgaWYoY250W3ZdID09IDEpIHJlcysrOwogICAgICAgIGNudFt2XSsrOwogICAgfQp9Cgp2b2lkIG5lbnNvKCkKewogICAgZm9yIChpbnQgaSA6IHMpCiAgICAgICAgYi5wdXNoX2JhY2soaSk7CiAgICBzb3J0KGIuYmVnaW4oKSwgYi5lbmQoKSk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgYVtpXSA9IGxvd2VyX2JvdW5kKGIuYmVnaW4oKSwgYi5lbmQoKSwgYVtpXSkgLSBiLmJlZ2luKCkgKyAxOwp9CgppbnQzMl90IG1haW4oKQp7CiAgICBmYXN0SU87CiAgICBGaWxlKGZpbGUgIi5pbnAiLCBmaWxlICIub3V0Iik7CgogICAgY2luID4+IG4gPj4gdDsKICAgIHdoaWxlKGJsb2NrICogYmxvY2sgPCBuKSBibG9jaysrOwoKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSBjaW4gPj4gYVtpXSwgcy5pbnNlcnQoYVtpXSk7CiAgICBuZW5zbygpOwogICAgZm9yKGludCBpID0gMTsgaSA8PSB0OyBpKyspCiAgICB7CiAgICAgICAgY2luID4+IHFbaV0ubCA+PiBxW2ldLnI7CiAgICAgICAgcVtpXS5pZCA9IGk7CiAgICB9CiAgICBzb3J0KHErMSwgcSt0KzEsIGNtcCk7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IHQ7IGkrKykKICAgIHsKICAgICAgICBjaHV5ZW4ocVtpLTFdLmwsIHFbaS0xXS5yLCBxW2ldLmwsIHFbaV0ucik7CiAgICAgICAgYW5zW3FbaV0uaWRdID0gcmVzOwogICAgfQogICAgZm9yKGludCBpID0gMTsgaSA8PSB0OyBpKyspIGNvdXQgPDwgYW5zW2ldIDw8ICJcbiI7Cn0K