#include<cstdio>
#include<algorithm>
int c,T,n;
struct box{
int a,b;
long long t;
}arr[200086];
template<typename Tp>
inline Tp read()
{
Tp m=0,n=1;
char ch=getchar();
while(ch>'9'||ch<'0')
{
if(ch=='-') n=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
m=(m<<3)+(m<<1)+(ch^48);
ch=getchar();
}
return m*n;
}
namespace subtask_n_3000{
struct sort_item{
int bel;long long t;
bool operator < (const sort_item& rhs)const
{return t<rhs.t;}
}temp[200086];
struct data_block{
int cnt,al,ar;
long long sum_l,sum_r;
data_block():cnt(0),al(0),ar(0),sum_l(0),sum_r(0){}
data_block(int l_pos,int _cnt)
:cnt(_cnt),al(l_pos),ar(l_pos+_cnt-1),sum_l(0),sum_r(0){}
data_block(int _cnt,int _al,int _ar,long long _sum_l,long long _sum_r)
:cnt(_cnt),al(_al),ar(_ar),sum_l(_sum_l),sum_r(_sum_r){}
};
inline const data_block merge(const data_block& lhs,const data_block& rhs)
{
return data_block(lhs.cnt+rhs.cnt,lhs.al,rhs.ar,
lhs.sum_l+rhs.sum_l+1ll*rhs.cnt*(rhs.al-(lhs.al+lhs.cnt)),
rhs.sum_r+lhs.sum_r+1ll*lhs.cnt*(rhs.ar-rhs.cnt-lhs.ar));
}
struct node{
int l,r,lzd;
int al,ar;
data_block val;
}tr[800086];
inline void push_up(int now)
{tr[now].val=merge(tr[now<<1].val,tr[now<<1|1].val);}
void build(int now,int l,int r)
{
tr[now].l=l,tr[now].r=r,tr[now].lzd=0;
if(l!=r)
{
int mid=(l+r)>>1;
build(now<<1,l,mid);
build(now<<1|1,mid+1,r);
push_up(now);
}
else tr[now].val=data_block(arr[l].a,1);
}
inline void cover_tag(int now,int val)
{
tr[now].val=data_block(val,tr[now].r-tr[now].l+1);
tr[now].lzd=val;
}
inline void lzd_down(int now)
{
if(tr[now].lzd)
{
cover_tag(now<<1,tr[now].lzd);
cover_tag(now<<1|1,tr[now].lzd+tr[now<<1].val.cnt);
tr[now].lzd=0;
}
}
void modify(int now,int l,int r,int val)
{
if(l<=tr[now].l&&tr[now].r<=r) return cover_tag(now,val+tr[now].l-l),void();
lzd_down(now);int mid=(tr[now].l+tr[now].r)>>1;
if(l<=mid) modify(now<<1,l,r,val);
if(mid<r) modify(now<<1|1,l,r,val);
push_up(now);
}
int get_pos_r(int now,int l,int key)
{
if(tr[now].l==tr[now].r) return tr[now].l;
lzd_down(now);int mid=(tr[now].l+tr[now].r)>>1;
if(l>mid) return get_pos_r(now<<1|1,l,key);
else if(key+mid-l+1-1<tr[now<<1|1].val.al)
return get_pos_r(now<<1,l,key);
else return get_pos_r(now<<1|1,l,key);
}
int get_pos_l(int now,int r,int key)
{
if(tr[now].l==tr[now].r) return tr[now].r;
lzd_down(now);int mid=(tr[now].l+tr[now].r)>>1;
if(r<=mid) return get_pos_l(now<<1,r,key);
else if(key-(r-mid)+1>tr[now<<1].val.ar)
return get_pos_l(now<<1|1,r,key);
else return get_pos_l(now<<1,r,key);
}
const data_block query(int now,int l,int r)
{
if(l<=tr[now].l&&tr[now].r<=r) return tr[now].val;
lzd_down(now);int mid=(tr[now].l+tr[now].r)>>1;
if(r<=mid) return query(now<<1,l,r);
else if(mid<l) return query(now<<1|1,l,r);
else return merge(query(now<<1,l,r),query(now<<1|1,l,r));
}
void solve()
{
for(int i=1;i<=n;i++)
temp[i].bel=i,temp[i].t=arr[i].t;
build(1,1,n);
std::sort(temp+1,temp+1+n);
long long now=0;
for(int i=1;i<=n;i++)
{
int no=temp[i].bel;
long long need=0;
if(arr[no].b>arr[no].a)
{
int pos=get_pos_r(1,no,arr[no].b);
data_block val=query(1,no,pos);
modify(1,no,pos,arr[no].b);
need=val.sum_r+1ll*(arr[no].b+val.cnt-1-val.ar)*val.cnt;
}
else
{
int pos=get_pos_l(1,no,arr[no].b);
data_block val=query(1,pos,no);
modify(1,pos,no,arr[no].b-val.cnt+1);
need=val.sum_l+1ll*(val.al-(arr[no].b-val.cnt+1))*val.cnt;
}
if((now+=need)>arr[no].t)
{
printf("No\n");
return;
}
}
printf("Yes\n");
}
}
int main()
{
freopen("move.in","r",stdin);
freopen("move.out","w",stdout);
c=read<int>(),T=read<int>();
while(T--)
{
n=read<int>();
for(int i=1;i<=n;i++)
arr[i].a=read<int>(),
arr[i].b=read<int>(),
arr[i].t=read<long long>();
subtask_n_3000::solve();
}
return 0;
}