#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<bitset>
#include<cmath>
#define ll long long
using namespace std;
const int N=1e5+10,M=25010;
int n,m,g;
int a[N],b[N];
int len[N],cnt[N],v[M],op[N<<2];
struct ms{int l,r,id;}q[N<<2];
int tot,l=1,r,ql,qr,qi;
bool cmp(ms x,ms y){return op[x.l]==op[y.l]?x.r<y.r:op[x.l]<op[y.l];}
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<N>now,ans[M];
void add(int x)
{
cnt[a[x]]++;
now[a[x]+cnt[a[x]]-1]=1;
}
void del(int x)
{
cnt[a[x]]--;
now[a[x]+cnt[a[x]]]=0;
}
void solve(int k)
{
memset(cnt,0,sizeof(cnt));
memset(v,0,sizeof(v));
memset(len,0,sizeof(len));
tot=0;
for(int i=1;i<=k;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<=tot/3;i++)ans[i].set();
now.reset();
l=1,r=0;
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++);
if(!v[qi])ans[qi]=now,v[qi]=1;
else ans[qi]&=now;
}
for(int i=1;i<=k;i++)printf("%d\n",len[i]-ans[i].count()*3);
}
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],op[i]=(i-1)/g+1;
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;
int T=M-10;
while(m)
{
if(m<T)
{
solve(m);
break;
}
else solve(T),m-=T;
}
return 0;
}