This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//雪花飄飄北風嘯嘯
//天地一片蒼茫
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/rope>
using namespace std;
using namespace __gnu_pbds;
using namespace __gnu_cxx;
#define ll long long
#define ii pair<ll,ll>
#define iii pair<ii,ll>
#define fi first
#define se second
#define endl '\n'
#define debug(x) cout << #x << " is " << x << endl;
#define rep(x,start,end) for(auto x=(start)-((start)>(end));x!=(end)-((start)>(end));((start)<(end)?x++:x--))
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
ll MAX(ll a){return a;}
ll MIN(ll a){return a;}
template<typename... Args>
ll MAX(ll a,Args... args){return max(a,MAX(args...));}
template<typename... Args>
ll MIN(ll a,Args... args){return min(a,MIN(args...));}
#define indexed_set tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update>
mt19937 rng(chrono::system_clock::now().time_since_epoch().count());
struct Q{
	ll l,r,val;
	
	Q(int a,int b,int c){
		l=a,r=b,val=c;
	}
};
struct node{
	int s,e,m;
	ii val;
	ll lazy=0;
	node *l,*r;
	
	node (int _s,int _e){
		s=_s,e=_e,m=s+e>>1;
		val=ii(0,s);
		
		if (s!=e){
			l=new node(s,m);
			r=new node(m+1,e);
		}
	}
	
	void propo(){
		if (lazy){
			val.fi+=lazy;
			if (s!=e){
				l->lazy+=lazy;
				r->lazy+=lazy;
			}
			lazy=0;
		}
	}
	
	void update(int i,int j,ll k){
		if (s==i && e==j) lazy+=k;
		else{
			if (j<=m) l->update(i,j,k);
			else if (m<i) r->update(i,j,k);
			else l->update(i,m,k),r->update(m+1,j,k);
			
			l->propo(),r->propo();
			val=min(l->val,r->val);
		}
	}
	
	ii query(int i,int j){
		propo();
		
		if (s==i && e==j) return val;
		else if (j<=m) return l->query(i,j);
		else if (m<i) return r->query(i,j);
		else return min(l->query(i,m),r->query(m+1,j));
	}
} *root=new node(0,100005);
struct node2{
	int s,e,m;
	int mx=-1;
	node2 *l,*r;
	
	node2 (int _s,int _e){
		s=_s,e=_e,m=s+e>>1;
		
		if (s!=e){
			l=new node2(s,m);
			r=new node2(m+1,e);
		}
	}
	
	void update(int i,int j,int k){
		if (s==i && e==j) mx=max(mx,k);
		else if (j<=m) l->update(i,j,k);
		else if (m<i) r->update(i,j,k);
		else l->update(i,m,k),r->update(m+1,j,k);
	}
	
	int query(int i){
		if (s==e) return mx;
		else if (i<=m) return max(mx,l->query(i));
		else return max(mx,r->query(i));
	}
} *root2=new node2(0,100005);
int n,q;
ii range[100005];
int cnt[100005];
int ans[100005];
void rage(){
	rep(x,0,n) cout<<"-1 ";
	exit(0);
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	memset(ans,-1,sizeof(ans));
	
	cin>>n>>q;
	
	rep(x,0,n) range[x]=ii(-1,100005);
	
	vector<Q> qu;
	
	ll a,b,c;
	while (q--){
		cin>>a>>b>>c;
		
		qu.push_back(Q(a,b,c));
		root->update(a,b,1);
		root2->update(a,b,c);
		
		range[c].fi=max(range[c].fi,a);
		range[c].se=min(range[c].se,b);
		cnt[c]++;
	}
	
	sort(all(qu),[](Q i,Q j){
		return i.val>j.val;
	});
	
	while (!qu.empty()){
		int lo=qu.back().val;
		
		if (range[lo].fi>range[lo].se) rage();
		
		ii temp=root->query(range[lo].fi,range[lo].se);
		
		//cout<<temp.fi<<" "<<temp.se<<endl;
		
		if (temp.fi!=cnt[lo]) rage();
		
		int pos=temp.se;
		
		ans[pos]=lo;
		
		while (!qu.empty() && qu.back().val==lo){
			root->update(qu.back().l,qu.back().r,-1);
			qu.pop_back();
		}
	}
	
	
	vector<int> proc;
	set<int> avail;
	
	rep(x,0,n) avail.insert(x);
	rep(x,0,n){
		if (ans[x]==-1) proc.push_back(x);
		else avail.erase(ans[x]);
	}
	
	sort(all(proc),[](int i,int j){
		return root2->query(i)<root2->query(j);
	});
	
	for (auto &it:proc){
		if (*avail.begin()<root2->query(it)) rage();
		
		ans[it]=*avail.begin();
		avail.erase(*avail.begin());
	}
	
	rep(x,0,n) cout<<ans[x]<<" ";
}
Compilation message (stderr)
rmq.cpp: In constructor 'node::node(int, int)':
rmq.cpp:49:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   49 |   s=_s,e=_e,m=s+e>>1;
      |               ~^~
rmq.cpp: In constructor 'node2::node2(int, int)':
rmq.cpp:97:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   97 |   s=_s,e=_e,m=s+e>>1;
      |               ~^~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |