#include <bits/stdc++.h>
using namespace std;
//
const int mx = 1e5 + 5;
const int S = 320;
//
struct query
{
int l, r, x, id;
//
bool operator < (const query &other)
{
if (l / S != other.l / S)
return l < other.l;
return l / S & 1 ? r < other.r : r > other.r;
}
};
//
int n, q, A[mx];
int cnt[mx], orz[mx], ans[mx];
query Q[mx];
//
void calc (void)
{
int l = 0, r = 0;
//
for (int i = 1; i <= q; ++i)
{
while (l < Q[i].l)
{
--orz[cnt[A[l]]];
--cnt[A[l]];
++orz[cnt[A[l]]];
++l;
}
while (l > Q[i].l)
{
--l;
--orz[cnt[A[l]]];
++cnt[A[l]];
++orz[cnt[A[l]]];
}
while (r < Q[i].r)
{
++r;
--orz[cnt[A[r]]];
++cnt[A[r]];
++orz[cnt[A[r]]];
}
while (r > Q[i].r)
{
--orz[cnt[A[r]]];
--cnt[A[r]];
++orz[cnt[A[r]]];
--r;
}
ans[Q[i].id] = orz[Q[i].x];
}
}
//
void process (void)
{
cin >> n >> q;
for (int i = 1; i <= n; ++i)
cin >> A[i];
for (int i = 1; i <= q; ++i)
cin >> Q[i].l >> Q[i].r >> Q[i].x,
Q[i].id = i;
sort(Q + 1, Q + q + 1);
calc();
for (int i = 1; i <= q; ++i)
cout << ans[i] << '\n';
}
//
signed main (void)
{
ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
process();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vCmNvbnN0IGludCBteCA9IDFlNSArIDU7CmNvbnN0IGludCBTID0gMzIwOwovLwpzdHJ1Y3QgcXVlcnkKewogICAgaW50IGwsIHIsIHgsIGlkOwogICAgLy8KICAgIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgcXVlcnkgJm90aGVyKQogICAgewogICAgICAgIGlmIChsIC8gUyAhPSBvdGhlci5sIC8gUykKICAgICAgICAgICAgcmV0dXJuIGwgPCBvdGhlci5sOwogICAgICAgIHJldHVybiBsIC8gUyAmIDEgPyByIDwgb3RoZXIuciA6IHIgPiBvdGhlci5yOwogICAgfQp9OwovLwppbnQgbiwgcSwgQVtteF07CmludCBjbnRbbXhdLCBvcnpbbXhdLCBhbnNbbXhdOwpxdWVyeSBRW214XTsKLy8Kdm9pZCBjYWxjICh2b2lkKQp7CiAgICBpbnQgbCA9IDAsIHIgPSAwOwogICAgLy8KICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHE7ICsraSkKICAgIHsKICAgICAgICB3aGlsZSAobCA8IFFbaV0ubCkKICAgICAgICB7CiAgICAgICAgICAgIC0tb3J6W2NudFtBW2xdXV07CiAgICAgICAgICAgIC0tY250W0FbbF1dOwogICAgICAgICAgICArK29yeltjbnRbQVtsXV1dOwogICAgICAgICAgICArK2w7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChsID4gUVtpXS5sKQogICAgICAgIHsKICAgICAgICAgICAgLS1sOwogICAgICAgICAgICAtLW9yeltjbnRbQVtsXV1dOwogICAgICAgICAgICArK2NudFtBW2xdXTsKICAgICAgICAgICAgKytvcnpbY250W0FbbF1dXTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKHIgPCBRW2ldLnIpCiAgICAgICAgewogICAgICAgICAgICArK3I7CiAgICAgICAgICAgIC0tb3J6W2NudFtBW3JdXV07CiAgICAgICAgICAgICsrY250W0Fbcl1dOwogICAgICAgICAgICArK29yeltjbnRbQVtyXV1dOwogICAgICAgIH0KICAgICAgICB3aGlsZSAociA+IFFbaV0ucikKICAgICAgICB7CiAgICAgICAgICAgIC0tb3J6W2NudFtBW3JdXV07CiAgICAgICAgICAgIC0tY250W0Fbcl1dOwogICAgICAgICAgICArK29yeltjbnRbQVtyXV1dOwogICAgICAgICAgICAtLXI7CiAgICAgICAgfQogICAgICAgIGFuc1tRW2ldLmlkXSA9IG9yeltRW2ldLnhdOwogICAgfQp9Ci8vCnZvaWQgcHJvY2VzcyAodm9pZCkKewogICAgY2luID4+IG4gPj4gcTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkKICAgICAgICBjaW4gPj4gQVtpXTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHE7ICsraSkKICAgICAgICBjaW4gPj4gUVtpXS5sID4+IFFbaV0uciA+PiBRW2ldLngsCiAgICAgICAgUVtpXS5pZCA9IGk7CgogICAgc29ydChRICsgMSwgUSArIHEgKyAxKTsKICAgIGNhbGMoKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBxOyArK2kpCiAgICAgICAgY291dCA8PCBhbnNbaV0gPDwgJ1xuJzsKfQovLwpzaWduZWQgbWFpbiAodm9pZCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSksIGNpbi50aWUobnVsbHB0ciksIGNvdXQudGllKG51bGxwdHIpOwogICAgcHJvY2VzcygpOwp9