#include<iostream>
#include<stdio.h>
#include<bits/stdc++.h>
#include <algorithm>
using namespace std;
int save[4][100001];
int mexline[100001];
int saveline[100001];
long long int n,m;
int a,b,c;
inline int judge(int count)
{
for (int i=0;i<=n;i++)
if (saveline[i]==count) return 1;
return 0;
}
inline int fill(int num)
{
for (int i=0;i<=n;i++)
saveline[i]=1;
//for (int ij=save[1][m];ij<=save[2][m];ij++)
//saveline[ij]=1;
int maxx=1;
for (int i=m;i>=1;i--)
{
if (save[3][i]>num)
{
for (int ij=save[1][i];ij<=save[2][i];ij++)
if (saveline[ij]==m-i) saveline[ij]=m-i+1;
maxx=m-i+1;
continue;
}
if (save[3][i]==num)
{
for (int ij=save[1][i];ij<=save[2][i];ij++)
saveline[ij]=0;
}
if (save[3][i]<num) break;
}
for (int i=0;i<=n;i++)
if (saveline[i]==maxx and mexline[i]==-1)
{mexline[i]=num;return 0;}
return 1;
}
int main()
{
memset(mexline,-1,sizeof(mexline));
cin>>n>>m;
for (int j=1;j<=m;j++)
{
scanf("%d%d%d",&save[1][j],&save[2][j],&save[3][j]);
for (int ii=1;ii<=j-1;ii++)
if (save[3][j]<=save[3][ii])
{
a=save[1][j];
b=save[2][j];
c=save[3][j];
for (int ij=j;ij>=ii;ij--)
{
save[1][ij]=save[1][ij-1];
save[2][ij]=save[2][ij-1];
save[3][ij]=save[3][ij-1];
}
save[1][ii]=a;
save[2][ii]=b;
save[3][ii]=c;
break;
}
}
//for (int j=1;j<=m;j++)
//save[1][j]++,save[2][j]++;
for (int ii=0;ii<=n;ii++)
{
if (fill(ii))
{
cout<<"-1"<<endl;return 0;
}
}
for (int i=0;i<=n;i++)
cout<<mexline[i]<<" ";
return 0;
}
/*
for (int ii=save[1][j];ii<=save[2][j];ii++)
{
for (int ij=0;ij<=save[3][j]-1;ij++)
quene1[ii].okline[ij]=1;
}
struct tree
{
int okline[500];
int noline[500];
}queue1[500000];
for (int j=1;j<=m;j++)
cout<<save[1][j]<<" "<<save[2][j]<<" "<<save[3][j]<<" "<<endl;
for (int i=0;i<=n;i++)
cout<<mexline[i]<<" ";
cout<<endl<<endl;
for (int i=0;i<=n;i++)
cout<<saveline[i]<<" ";
cout<<endl;
cout<<i<<endl;
for (int i=0;i<=n;i++)
cout<<saveline[i]<<" ";
cout<<endl;
cout<<num<<"!"<<maxx<<endl;
*/