#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();
}