#include <iostream>
#include <queue>
using namespace std;
struct node{
int id; // 钥匙号
char op; // 操作:‘G’取钥匙;‘R’还钥匙
int time; // 时间点
bool operator <(node a)const //意思就是队列中的节点按照time小的,op大的(‘R’),id小的进行排序
{
if(time != a.time)
return time>a.time;
else if(op != a.op)
return op < a.op;
else
return id > a.id;
}
/* 另一种重载<的方法
friend bool operator <(node a, node b)
{
if(a.time != b.time)
return a.time>b.time;
else if(a.op != b.op)
return a.op < b.op;
else
return a.id > b.id;
}
*/
};
const int N=1000;
int ans[N+1];
int main()
{
int n, k;
int w, s, c;
priority_queue<node> q;
node t;
cin>>n>>k;
for(int i=1; i<=n; i++)
ans[i] = i;
for(int i=1; i<=k; i++)
{
cin>>w>>s>>c;
t.id = w;
t.time = s;
t.op = 'G';
q.push(t);
t.op='R';
t.time=s+c;
q.push(t);
}
while(!q.empty())
{
t = q.top();
q.pop();
if(t.op == 'G')
{
for(int i=1; i<=n; i++)
{
if(ans[i] == t.id){
ans[i]=0;
break;
}
}
}else // op为‘R’
{
for(int i=1; i<=n; i++)
{
if(ans[i] == 0){
ans[i]=t.id;
break;
}
}
}
}
for(int i=1; i<=n; i++)
{
if(i!=1)
cout<<" ";
cout<<ans[i];
}
return 0;
}