#include<iostream>
#include<algorithm>
using namespace std;
const int N=2e6+5;
int ans[N],n,m;
struct node{
int x,y,id,val;
}st[N<<1];
int lowbit(int i){
return i&(-i);
}
int f[N];
void add(int x){
for(int i=x;i<N;i+=lowbit(i)) f[i]++;
}
int ask(int x){
int ans=0;
for(int i=x;i>=1;i-=lowbit(i)) ans+=f[i];
return ans;
}
bool cmp(node a,node b){
if(a.x==b.x){
if(a.y==b.y) return a.id<b.id;
return a.y<b.y;
}
return a.x<b.x;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
for(int i=1,a;i<=n;i++){
cin>>a;
st[i].x=i,st[i].y=a,st[i].id=0;
}
for(int i=1,l,r,x;i<=m;i++){
cin>>l>>r>>x;
st[++n].x=r,st[n].y=x,st[n].id=i,st[n].val=1;
st[++n].x=l-1,st[n].y=x,st[n].id=i,st[n].val=-1;
}
sort(st+1,st+n+1,cmp);
for(int i=1;i<=n;i++){
if(st[i].id) ans[st[i].id]+=st[i].val*ask(st[i].y);
else add(st[i].y);
}
for(int i=1;i<=m;i++) cout<<ans[i]<<"\n";
return 0;
}