#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<bitset>
#include<cmath>
#define ll long long
using namespace std;
int n,m,g;
int a[100010],b[100010];
int len[100010],cnt[100010];
struct ms{int l,r,id;}q[400010];
int tot,l=1,r,ql,qr,qi;
bool cmp(ms x,ms y){return x.r/g==y.r/g?x.l<y.l:x.r<y.r;}
void add(int l,int r,int i)
{
q[++tot].l=l;
q[tot].r=r;
q[tot].id=i;
len[i]+=r-l+1;
}
bitset<100010>now,ans[40010];
void add(int x)
{
now[a[x]-cnt[a[x]]]=1;
cnt[a[x]]++;
}
void del(int x)
{
cnt[a[x]]--;
now[a[x]-cnt[a[x]]]=0;
}
int main()
{
scanf("%d%d",&n,&m);
g=sqrt(n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]),b[i]=a[i];
sort(b+1,b+1+n);
for(int i=1;i<=n;i++)a[i]=upper_bound(b+1,b+1+n,a[i])-b-1;
for(int i=1;i<=m;i++)
{
int l1,r1,l2,r2,l3,r3;
scanf("%d%d%d%d%d%d",&l1,&r1,&l2,&r2,&l3,&r3);
add(l1,r1,i),add(l2,r2,i),add(l3,r3,i);
}
sort(q+1,q+1+tot,cmp);
for(int i=1;i<=m;i++)ans[i].set();
for(int i=1;i<=tot;i++)
{
ql=q[i].l,qr=q[i].r,qi=q[i].id;
while(r<qr)add(++r);
while(l>ql)add(--l);
while(r>qr)del(r--);
while(l<ql)del(l++);
ans[qi]&=now;
}
for(int i=1;i<=m;i++)printf("%d\n",len[i]-ans[i].count()*3);
}