rt,code
#include<bits/stdc++.h>
#define int long long
#define lowbit(x) ((x)&(-x))
#define N 15*114514
using namespace std;
int a[N],n;
const int maxn=N;
struct _{
int l,r,t;
void input(){cin>>l>>r>>t
;}
bool operator < (const _ A) const {
return r<A.r;
}
}s[N];
struct Segment{
long long a[maxn],w[4*maxn],lzy[4*maxn];
void pushup(int u)
{
w[u]=w[u*2]+w[u*2+1];
}
bool InRange(int L,int R,int l,int r)
{
return (l<=L)&&(R<=r);
}
bool OutofRange(int L,int R,int l,int r)
{
return (L>r)||(R<l);
}
void maketag(int u,int len,long long x)
{
lzy[u]=x;
w[u]=len*x;
}
void pushdown(int u,int l,int r)
{
int m=(l+r)/2;
if(lzy[u]==0) return;
maketag(u*2,m-l+1,lzy[u]);
maketag(u*2+1,r-m,lzy[u]);
lzy[u]=0;
}
int query(int l,int r,int u=1,int L=1,int R=n)
{
if(InRange(L,R,l,r)) return w[u];
else if(!OutofRange(L,R,l,r))
{
int m=(L+R)/2;
pushdown(u,L,R);
return query(l,r,u*2,L,m)+query(l,r,u*2+1,m+1,R);
}
else return 0;
}
void update(int l,int r,long long x,int u=1,int L=1,int R=n)
{
if(InRange(L,R,l,r)) maketag(u,R-L+1,x);
else if(!OutofRange(L,R,l,r))
{
int m=(L+R)/2;
pushdown(u,L,R);
update(l,r,x,u*2,L,m);
update(l,r,x,u*2+1,m+1,R);
pushup(u);
}
}
};
void Main()
{
Segment bb;
int k;
cin>>n>>k;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=k;i++)
{
s[i].input();
s[i].l=lower_bound(a+1,a+n+1,s[i].l)-a;
s[i].r=upper_bound(a+1,a+n+1,s[i].r)-a-1;
if(s[i].r==0) i--,k--;
}
sort(s+1,s+k+1);
for(int i=1;i<=k;i++)
{
int l=s[i].l,r=s[i].r,t=s[i].t;
if(bb.query(l,r)>=t) continue;
int L=l-1,R=r-1;
while(L<R)
{
int mid=(L+R+1)>>1;int sum=bb.query(l,mid);
if(sum+r-mid>=t) L=mid;
else R=mid-1;
}
bb.update(L+1,r,1);
}
// for(int i=1;i<=n;i++) cout<<bb.query(i,i)*114514<<' ';
cout<<n-bb.query(1,n)<<'\n';
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int T;
cin>>T;
while(T--) Main();
return 0;
}