#include <bits/stdc++.h>
using namespace std;
using ll=long long;
struct mxmn{
int mx,mn;
};
mxmn seg[8000001];
mxmn lazy[8000001];
void update_lazy(int s,int e,int idx){
seg[idx].mx=min(seg[idx].mx,lazy[idx].mx);
seg[idx].mn=min(seg[idx].mn,lazy[idx].mx);
seg[idx].mn=max(seg[idx].mn,lazy[idx].mn);
seg[idx].mx=max(seg[idx].mx,lazy[idx].mn);
if(s!=e){
lazy[idx*2].mx=min(lazy[idx*2].mx,lazy[idx].mx);
lazy[idx*2].mn=min(lazy[idx*2].mn,lazy[idx].mx);
lazy[idx*2].mn=max(lazy[idx*2].mn,lazy[idx].mn);
lazy[idx*2].mx=max(lazy[idx*2].mx,lazy[idx].mn);
lazy[idx*2+1].mx=min(lazy[idx*2+1].mx,lazy[idx].mx);
lazy[idx*2+1].mn=min(lazy[idx*2+1].mn,lazy[idx].mx);
lazy[idx*2+1].mn=max(lazy[idx*2+1].mn,lazy[idx].mn);
lazy[idx*2+1].mx=max(lazy[idx*2+1].mx,lazy[idx].mn);
}
lazy[idx].mx=1e9;
lazy[idx].mn=-1e9;
}
void update_range(int s,int e,int idx,int qs,int qe,int to,int tp){
update_lazy(s,e,idx);
if(s>qe||qs>e) return;
if(qs<=s&&e<=qe){
if(tp==1){
lazy[idx].mn=max(lazy[idx].mn,to);
}
else lazy[idx].mx=min(lazy[idx].mx,to);
update_lazy(s,e,idx);
return;
}
int mid=(s+e)/2;
update_range(s,mid,idx*2,qs,qe,to,tp);
update_range(mid+1,e,idx*2+1,qs,qe,to,tp);
seg[idx].mn=min(seg[idx*2].mn,seg[idx*2+1].mn);
seg[idx].mx=max(seg[idx*2].mx,seg[idx*2+1].mx);
}
mxmn query(int s,int e,int idx,int qs,int qe){
update_lazy(s,e,idx);
if(s>qe||qs>e) return {(int)1e9,-(int)1e9};
if(s==e){
//cout<<s<<' '<<seg[idx].mn<<"\n";
return seg[idx];
}
int mid=(s+e)/2;
mxmn A=query(s,mid,idx*2,qs,qe);
mxmn B=query(mid+1,e,idx*2+1,qs,qe);
return {min(A.mx,B.mx),max(A.mn,B.mn)};
}
int main(){
cin.tie(0)->ios::sync_with_stdio(0);
int n,m;
cin>>n>>m;
for(int i=0;i<=n*4;i++) seg[i].mx=seg[i].mn=0,lazy[i].mx=1e9,lazy[i].mn=-1e9;
for(int i=1;i<=m;i++){
int a,b,c,d;
cin>>a>>b>>c>>d;
if(a==1){
update_range(0,n-1,1,b,c,d,1);
}
else{
update_range(0,n-1,1,b,c,d,0);
}
// for(int j=0;j<n;j++){
// cout<<query(0,n-1,1,j,j).mn<<"\n";
// }
// cout<<"\n";
}
for(int i=0;i<n;i++){
cout<<query(0,n-1,1,i,i).mn<<"\n";
}
}