const int MAXN=1e6+5,MAXK=1e6+5,MAXV=63;
int l[MAXK],r[MAXK],l2[MAXK],r2[MAXN],c[MAXN];
LL w[MAXK],s[MAXN];
bool ans[MAXK],ok[MAXK];
vector<int> vec1,vec2;
void solve(int n){
vector<int> vec3;
mem(ok,0);
mem(s,0);
for(int i:vec1){
s[l[i]]+=MAXK+i;
s[r[i]+1]-=MAXK+i;
l2[i]=MAXN;
r2[i]=0;
}
_rep(i,1,n){
s[i]+=s[i-1];
c[i]=c[i-1]+(s[i]==0);
}
for(int i:vec2){
if(c[r[i]]-c[l[i]-1]==0)
vec3.push_back(i);
}
if(vec3.size()==0)
return;
else if(vec3.size()==1){
int t=*vec3.begin();
for(int i:vec2){
if(i!=t)
ans[i]=false;
}
}
else{
for(int i:vec2)
ans[i]=false;
}
int L=n,R=1;
for(int i:vec3)
L=min(r[i],L),R=max(l[i],R);
_rep(i,1,n){
if(s[i]){
s[i]-=MAXK;
if(s[i]<MAXK){
l2[s[i]]=min(l2[s[i]],i);
r2[s[i]]=max(r2[s[i]],i);
}
}
}
for(int i:vec1){
if(l2[i]<=r2[i]){
if(l2[i]<=L&&R<=r2[i])
ok[i]=true;
}
}
for(int i:vec1){
if(!ok[i])
ans[i]=false;
}
}
int main(){
int n=read_int(),k=read_int();
_rep(i,1,k){
l[i]=read_int();
r[i]=read_int();
w[i]=read_LL();
ans[i]=true;
}
_for(i,0,MAXV){
vec1.clear();
vec2.clear();
_rep(j,1,k){
if((w[j]>>i)&1)
vec1.push_back(j);
else
vec2.push_back(j);
}
solve(n);
}
_rep(i,1,k){
if(ans[i])
putchar('1');
else
putchar('0');
}
return 0;
}