#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read()
{
int x=0,r=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-') r=-1;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*r;
}
int c,T;
int n;
struct node
{
int a,b,t,num;
} d[200005];
int tag[800005];
struct seg
{
int l,r,sum,nxtm,sum1;
seg operator +(const seg b) const
{
seg ans;
ans.l=l;
ans.r=b.r;
ans.sum=sum+b.sum;
ans.sum1=sum1+b.sum1;
ans.nxtm=nxtm+sum*(b.r-b.l+1)+b.nxtm;
return ans;
}
seg set1()
{
seg ans;
ans.l=l;
ans.r=r;
ans.sum=(r-l+1);
ans.sum1=sum1;
int d=(r-l+1);
ans.nxtm=d*(d+1)/2;
return ans;
}
} tr[1000005];
void pushdown(int p,int l,int r)
{
if(tag[p]==0) return;
if(l==r)
{
tag[p]=0;
return;
}
tr[p<<1]=tr[p<<1].set1();
tr[p<<1|1]=tr[p<<1|1].set1();
tag[p<<1]=1;
tag[p<<1|1]=1;
tag[p]=0;
}
void build(int p,int l,int r)
{
if(l==r)
{
tag[p]=0;
tr[p].l=l;
tr[p].r=r;
tr[p].sum=d[l].a-d[l-1].a;
tr[p].sum1=0;
tr[p].nxtm=tr[p].sum;
return;
}
tag[p]=0;
int mid=(l+r)>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
tr[p]=tr[p<<1]+tr[p<<1|1];
}
int cmp(node a,node b)
{
if(a.t==b.t) return a.b<b.b;
return a.t<b.t;
}
int pos(int p,int l,int r,int nr)
{
if(nr==0) return 0;
pushdown(p,l,r);
if(r<=nr) return tr[p].sum;
int mid=(l+r)>>1;
int ans=pos(p<<1,l,mid,nr);
if(mid+1<=nr) ans+=pos(p<<1|1,mid+1,r,nr);
return ans;
}
void stab(int p,int l,int r,int k)
{
if(l==r)
{
tr[p].sum1=1;
return;
}
pushdown(p,l,r);
int mid=(l+r)>>1;
if(mid>=k) stab(p<<1,l,mid,k);
else stab(p<<1|1,mid+1,r,k);
tr[p]=tr[p<<1]+tr[p<<1|1];
}
void update(int p,int l,int r,int k,int nu)
{
if(l==r)
{
tr[p].sum=nu;
tr[p].nxtm=nu;
return;
}
pushdown(p,l,r);
int mid=(l+r)>>1;
if(mid>=k) update(p<<1,l,mid,k,nu);
else update(p<<1|1,mid+1,r,k,nu);
tr[p]=tr[p<<1]+tr[p<<1|1];
}
int check(int p,int l,int r,int nl,int nr)
{
if(nl<=l&&nr>=r)
{
return tr[p].sum1;
}
pushdown(p,l,r);
int mid=(l+r)>>1;
int cnt=0;
if(mid>=nl) cnt+=check(p<<1,l,mid,nl,nr);
if(mid+1<=nr) cnt+=check(p<<1|1,mid+1,r,nl,nr);
return cnt;
}
seg calc(int p,int l,int r,int nl,int nr)
{
if(nl<=l&&nr>=r)
{
return tr[p];
}
seg ans;
pushdown(p,l,r);
int mid=(l+r)>>1;
if(mid>=nl)
{
ans=calc(p<<1,l,mid,nl,nr);
if(mid+1<=nr) ans=ans+calc(p<<1|1,mid+1,r,nl,nr);
return ans;
}
if(mid+1<=nr) ans=calc(p<<1|1,mid+1,r,nl,nr);
return ans;
}
void reset(int p,int l,int r,int nl,int nr)
{
if(nl<=l&&nr>=r)
{
tr[p]=tr[p].set1();
tag[p]=1;
return;
}
pushdown(p,l,r);
int mid=(l+r)>>1;
if(mid>=nl) reset(p<<1,l,mid,nl,nr);
if(mid+1<=nr) reset(p<<1|1,mid+1,r,nl,nr);
tr[p]=tr[p<<1]+tr[p<<1|1];
}
void work()
{
n=read();
for(int i=1;i<=n;i++)
{
d[i].a=read();
d[i].b=read();
d[i].t=read();
d[i].num=i;
}
build(1,1,n);
sort(d+1,d+n+1,cmp);
int tim=0;
for(int i=1;i<=n;i++)
{
int nw=pos(1,1,n,d[i].num);
int re=d[i].num;
if(nw==d[i].b)
{
stab(1,1,n,d[i].num);
continue;
}
if(nw<d[i].b)
{
int l=re+1,r=n;
int ans=re;
while(l<=r)
{
int mid=(l+r)>>1;
if(pos(1,1,n,mid)<d[i].b+(mid-re))
{
ans=mid;
l=mid+1;
}
else r=mid-1;
}
if(ans==re)
{
int s=d[i].b-nw;
tim+=s;
if(tim>d[i].t)
{
printf("No\n");
return;
}
if(re==n)
{
int s=pos(1,1,n,re-1);
update(1,1,n,re,d[i].b-s);
stab(1,1,n,re);
continue;
}
int s1=pos(1,1,n,re-1);
int y=pos(1,1,n,re+1);
update(1,1,n,re+1,y-d[i].b);
update(1,1,n,re,d[i].b-s1);
continue;
}
int op=check(1,1,n,re+1,ans);
if(op)
{
printf("No\n");
return;
}
int g1=calc(1,1,n,re+1,ans).nxtm;
int dy=nw;
int s1=ans-re;
int ut=s1*(s1+1)/2+s1*d[i].b-g1-dy*s1;
ut+=d[i].b-nw;
tim+=ut;
if(tim>d[i].t)
{
printf("No\n");
return;
}
int u;
if(ans!=n)
{
u=pos(1,1,n,ans+1);
update(1,1,n,ans+1,u-(d[i].b+s1));
}
u=pos(1,1,n,re-1);
update(1,1,n,re,d[i].b-u);
reset(1,1,n,re+1,ans);
stab(1,1,n,re);
continue;
}
int l=1,r=re-1;
int ans=re;
while(l<=r)
{
int mid=(l+r)>>1;
if(pos(1,1,n,mid)>d[i].b-(re-mid))
{
ans=mid;
r=mid-1;
}
else l=mid+1;
}
if(ans==re)
{
int s=nw-d[i].b;
tim+=s;
if(tim>d[i].t)
{
printf("No\n");
return;
}
if(re==n)
{
int s=pos(1,1,n,re-1);
update(1,1,n,re,d[i].b-s);
stab(1,1,n,re);
continue;
}
int s1=pos(1,1,n,re-1);
int y=pos(1,1,n,re+1);
update(1,1,n,re+1,y-d[i].b);
update(1,1,n,re,d[i].b-s1);
continue;
}
int op=check(1,1,n,ans,re-1);
if(op)
{
printf("No\n");
return;
}
int g1=calc(1,1,n,ans,re-1).nxtm;
int dy=pos(1,1,n,ans-1);
int s1=re-ans;
int ut=g1+dy*s1-(d[i].b*s1-s1*(s1+1)/2);
ut+=nw-d[i].b;
tim+=ut;
if(tim>d[i].t)
{
printf("No\n");
return;
}
int u;
if(re!=n)
{
u=pos(1,1,n,re+1);
update(1,1,n,re+1,u-d[i].b);
}
u=pos(1,1,n,ans-1);
update(1,1,n,ans,d[i].b-s1-u);
reset(1,1,n,ans+1,re);
stab(1,1,n,re);
continue;
}
printf("Yes\n");
}
signed main()
{
freopen("move.in","r",stdin);
freopen("move.out","w",stdout);
c=read();
T=read();
while(T--) work();
}