#include<bits/stdc++.h>
using namespace std;
#define maxn 2000005
int _n,_m,_sum[maxn],_ans[maxn];
struct pp{
int l,r,w,ans,bh;
}_qr[maxn];
struct ppp{
int w,x;
}_num[maxn];
bool cmp1(pp a,pp b){
return a.w < b.w;
}
bool cmp2(pp a,pp b){
return a.bh < b.bh;
}
bool cmp(ppp a,ppp b){
return a.w < b.w;
}
int lobit(int x){
return x&-x;
}
void add(int x){
for(int i = x;i<maxn;i+=lobit(i))_sum[i]++;
}
int qr(int x){
int sum = 0;
for(int i = x;i>0;i-=lobit(i))sum+=_sum[i];
return sum;
}
inline void read(int& a)
{
int s = 0;
char ch = getchar();
while (ch < '0' || ch>'9')
{
ch = getchar();
}
while (ch >= '0' && ch <= '9')
{
s = s * 10 + ch - '0';
ch = getchar();
}
a=s;
}
int main(){
read(_n);
read(_m);
for(int i = 1;i <= _n;i++){
read(_num[i].w);
_num[i].x=i;
}
sort(_num+1,_num+1+_n,cmp);
for(int i = 1;i <= _m;i++){
read(_qr[i].l);read(_qr[i].r);read(_qr[i].w);
_qr[i].bh=i;
}
sort(_qr+1,_qr+1+_m,cmp1);
int rr = 0;
for(int i = 1;i <= _m;i++){
while(_num[rr+1].w <= _qr[i].w){
rr++;
add(_num[rr].x);
}
_ans[_qr[i].bh]=qr(_qr[i].r)-qr(_qr[i].l-1);
}
for(int i = 1;i <= _m;i++){
printf("%d\n",_ans[i]);
}
}