#include <bits/stdc++.h>
using namespace std;
#define N 100005
typedef pair<int,int> ii;
int n,m,a[N],ans[N],res=0,ts[N],bl;
int cnt[N];
struct que
{
int l,r,x,vt;
};
que q[N];
bool cmp(que a, que b) {
int block_a = a.l / bl;
int block_b = b.l / bl;
if (block_a != block_b)
return block_a < block_b;
if (block_a % 2 == 0)
return a.r < b.r;
else
return a.r > b.r;
}
void add(int x)
{
x=a[x];
ts[cnt[x]]--;
cnt[x]++;
ts[cnt[x]]++;
}
void del(int x)
{
x=a[x];
ts[cnt[x]]--;
cnt[x]--;
ts[cnt[x]]++;
}
signed main() {
if(fopen("w.inp","r"))
{
freopen("w.inp","r",stdin);
freopen("w.out","w",stdout);
}
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>m;
bl=sqrt(n);
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=m;i++)
{
cin>>q[i].l>>q[i].r>>q[i].x;
q[i].vt=i;
}
sort(q+1,q+1+m,cmp);
int l1=q[1].l;
int r1=q[1].r;
for(int i=q[1].l;i<=q[1].r;i++)
add(i);
ans[q[1].vt]=ts[q[1].x];
for(int i=2;i<=m;i++)
{
while(l1<q[i].l) del(l1++);
while(l1>q[i].l) add(--l1);
while(r1<q[i].r) add(++r1);
while(r1>q[i].r) del(r1--);
ans[q[i].vt]=ts[q[i].x];
}
for(int i=1;i<=m;i++)
cout<<ans[i]<<"\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgTiAxMDAwMDUKdHlwZWRlZiBwYWlyPGludCxpbnQ+IGlpOwppbnQgbixtLGFbTl0sYW5zW05dLHJlcz0wLHRzW05dLGJsOwppbnQgY250W05dOwpzdHJ1Y3QgcXVlCnsKICAgIGludCBsLHIseCx2dDsKfTsKcXVlIHFbTl07CmJvb2wgY21wKHF1ZSBhLCBxdWUgYikgewogICAgaW50IGJsb2NrX2EgPSBhLmwgLyBibDsKICAgIGludCBibG9ja19iID0gYi5sIC8gYmw7CiAgICBpZiAoYmxvY2tfYSAhPSBibG9ja19iKQogICAgICAgIHJldHVybiBibG9ja19hIDwgYmxvY2tfYjsKICAgIGlmIChibG9ja19hICUgMiA9PSAwKQogICAgICAgIHJldHVybiBhLnIgPCBiLnI7CiAgICBlbHNlCiAgICAgICAgcmV0dXJuIGEuciA+IGIucjsKfQp2b2lkIGFkZChpbnQgeCkKewogICAgeD1hW3hdOwogICAgdHNbY250W3hdXS0tOwogICAgY250W3hdKys7CiAgICB0c1tjbnRbeF1dKys7Cn0Kdm9pZCBkZWwoaW50IHgpCnsKICAgIHg9YVt4XTsKICAgIHRzW2NudFt4XV0tLTsKICAgIGNudFt4XS0tOwogICAgdHNbY250W3hdXSsrOwp9CnNpZ25lZCBtYWluKCkgewogICAgaWYoZm9wZW4oIncuaW5wIiwiciIpKQogICAgewogICAgICAgIGZyZW9wZW4oIncuaW5wIiwiciIsc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIncub3V0IiwidyIsc3Rkb3V0KTsKICAgIH0KICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgY2luPj5uPj5tOwogIGJsPXNxcnQobik7CiAgZm9yKGludCBpPTE7aTw9bjtpKyspCiAgICBjaW4+PmFbaV07CiAgZm9yKGludCBpPTE7aTw9bTtpKyspCiAgewogICAgICBjaW4+PnFbaV0ubD4+cVtpXS5yPj5xW2ldLng7CiAgICAgIHFbaV0udnQ9aTsKICB9CiAgc29ydChxKzEscSsxK20sY21wKTsKICBpbnQgbDE9cVsxXS5sOwogIGludCByMT1xWzFdLnI7CiAgZm9yKGludCBpPXFbMV0ubDtpPD1xWzFdLnI7aSsrKQogICAgYWRkKGkpOwogIGFuc1txWzFdLnZ0XT10c1txWzFdLnhdOwogIGZvcihpbnQgaT0yO2k8PW07aSsrKQogIHsKICAgICAgd2hpbGUobDE8cVtpXS5sKSBkZWwobDErKyk7CiAgICAgIHdoaWxlKGwxPnFbaV0ubCkgYWRkKC0tbDEpOwogICAgICB3aGlsZShyMTxxW2ldLnIpIGFkZCgrK3IxKTsKICAgICAgd2hpbGUocjE+cVtpXS5yKSBkZWwocjEtLSk7CiAgICAgIGFuc1txW2ldLnZ0XT10c1txW2ldLnhdOwogIH0KICBmb3IoaW50IGk9MTtpPD1tO2krKykKICAgIGNvdXQ8PGFuc1tpXTw8IlxuIjsKICAgIHJldHVybiAwOwp9