#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5,INF=0x3f3f3f3f3f3f3f3f;
int c,T,n;
struct L{
mutable int bh_l,bh_r,wz_l,wz_r;
bool operator <(const L to)const{ return bh_l!=to.bh_l?bh_l<to.bh_l:bh_r<to.bh_r; }
};
typedef multiset<L>::iterator iter;
struct ODT:multiset<L>{
int tim;
inline int len(iter x){
return x->bh_r-x->bh_l+1;
}
iter spt(int bh){
iter it=--upper_bound({bh,bh,0,0});
if(it->bh_l==bh) return it;
int bh_l=it->bh_l,bh_r=it->bh_r,wz_l=it->wz_l,wz_r=it->wz_r;
erase(it);
insert(L{bh_l,bh-1,wz_l,wz_l+(bh-1-bh_l)});
return insert(L{bh,bh_r,wz_l+(bh-bh_l),wz_r});
}
void try_gt_r(iter now,int to){
iter nxt=next(now);
int d1=to-now->wz_l;
if(now->wz_r+d1<nxt->wz_l) tim+=len(now)*d1,now->wz_l+=d1,now->wz_r+=d1;
else{
int d2=nxt->wz_l-1-now->wz_r;
tim+=len(now)*d2,nxt->bh_l=now->bh_l,nxt->wz_l=now->wz_l+d2;
try_gt_r(nxt,to);
erase(now);
}
}
void try_gt_l(iter now,int to){
iter pre=prev(now);
int d1=now->wz_r-to;
if(now->wz_l-d1>pre->wz_r) tim+=len(now)*d1,now->wz_l-=d1,now->wz_r-=d1;
else{
int d2=now->wz_l-(pre->wz_r+1);
tim+=len(now)*d2,pre->bh_r=now->bh_r,pre->wz_r=now->wz_r-d2;
erase(now);
try_gt_l(pre,to);
}
}
};
#define a(x) dat[x].a
#define b(x) dat[x].b
#define t(x) dat[x].t
#define id(x) dat[x].id
struct DAT{
int a,b,t,id;
bool operator <(const DAT to)const{ return t<to.t; }
}dat[N];
void solve(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a(i)>>b(i)>>t(i),id(i)=i;
ODT odt;odt.clear();odt.tim=0;
odt.insert(L{0,0,0,0});
odt.insert(L{n+1,n+1,INF,INF});
for(int i=1;i<=n;i++) odt.insert({i,i,a(i),a(i)});
sort(dat+1,dat+1+n);
for(int i=1;i<=n;i++){
iter tmp=(odt.spt(id(i)+1),odt.spt(id(i)));
if(tmp->wz_l<b(i)) odt.try_gt_r(tmp,b(i));
else odt.try_gt_l(tmp,b(i));
if(odt.tim>t(i)) return cout<<"No\n",void();
}
cout<<"Yes\n";
}
signed main(){
freopen("move.in","r",stdin);
freopen("move.out","w",stdout);
cin.tie(0)->sync_with_stdio(0);
cin>>c>>T;
while(T--) solve();
return 0;
}