#include <cstdio>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
#define MAXN 100010
int readint()
{
	int x = 0, c;
	while (!isdigit(c = getchar()));
	do
		x = x * 10 + c - '0';
	while (isdigit(c = getchar()));
	return x;
}
int n, m;
struct mimang
{
	long long t;
	int a, b, id;
	mimang() {}
	mimang(long long t, int a, int b, int id) : t(t), a(a), b(b), id(id) {}
};
bool operator <(mimang x, mimang y)
{
	if (x.t != y.t)
		return (x.t < y.t);
	if (x.a != y.a)
		return (x.a < y.a);
	if (x.b != y.b)
		return (x.b < y.b);
	return (x.id < y.id);
}
mimang q[MAXN];
struct node
{
	int sum, minpos, maxpos, l, r;
	vector<int> ms;
	node () {}
	node(int l, int r) : l(l), r(r), sum(0), minpos(200100), maxpos(0) {}
};
node segtree[MAXN << 2];
inline void update(int x)
{
	segtree[x].sum = segtree[x << 1].sum + segtree[(x << 1) | 1].sum;
	segtree[x].minpos = min(segtree[x << 1].minpos, segtree[(x << 1) | 1].minpos);
	segtree[x].maxpos = max(segtree[x << 1].maxpos, segtree[(x << 1) | 1].maxpos);
}
void build(int now, int l, int r)
{
	segtree[now] = node(l, r);
	if (l < r)
	{
		int mid = l + (r - l) / 2;
		build(now << 1, l, mid);
		build((now << 1) | 1, mid + 1, r);
	}
}
int query(int now, int l, int r)
{
	int nl = segtree[now].l, nr = segtree[now].r;
	if (l <= nl && r >= nr)
		return segtree[now].sum;
	if (l > nr || r < nl)
		return 0;
	return query(now << 1, l, r) + query((now << 1) | 1, l, r);
}
void insert(int now, int pos, int id)
{
	int nl = segtree[now].l, nr = segtree[now].r;
	if (nl == nr)
	{
		segtree[now].sum++;
		segtree[now].minpos = segtree[now].maxpos = nl;
		segtree[now].ms.push_back(id);
		return;
	}
	int mid = nl + (nr - nl) / 2;
	if (pos <= mid)
		insert(now << 1, pos, id);
	else
		insert((now << 1) | 1, pos, id);
	update(now);
}
int workl(int now, int pos)
{
	int nl = segtree[now].l, nr = segtree[now].r;
	if (nl == nr)
		return segtree[now].maxpos;
	int mid = nl + (nr - nl) / 2;
	if (pos <= mid)
		return workl(now << 1, pos);
	else
		return max(workl(now << 1 | 1, pos), segtree[now << 1].maxpos);
}
int workr(int now, int pos)
{
	int nl = segtree[now].l, nr = segtree[now].r;
	if (nl == nr)
		return segtree[now].minpos;
	int mid = nl + (nr - nl) / 2;
	if (pos <= mid)
		return min(workr(now << 1, pos), segtree[(now << 1) | 1].minpos);
	else
		return workr((now << 1) | 1, pos);
}
long long now, pos;
long long time, ans[MAXN];
int cnt;
void clear(int now, int pos)
{
	int nl = segtree[now].l, nr = segtree[now].r;
	if (nl == nr)
	{
		for (int i = 0; i < (int)segtree[now].ms.size(); i++)
		{
			int v = segtree[now].ms[i];
			if (v > 0)
				insert(1, q[v].b, -v);
			else
				ans[q[-v].id] = time, cnt++;
		}
		segtree[now].ms.clear();
		segtree[now] = node(pos, pos);
		return;
	}
	int mid = nl + (nr - nl) / 2;
	if (pos <= mid)
		clear(now << 1, pos);
	else
		clear((now << 1) | 1, pos);
	update(now);
}
int main()
{
	freopen("sm.in", "r", stdin);
	freopen("sm.out", "w", stdout);
	n = readint();
	m = readint();
	for (int i = 1; i <= n; i++)
	{
		int t = readint();
		int a = readint();
		int b = readint();
		q[i] = mimang(t, a, b, i);
	}
	cnt = 0, now = 1, time = 0, pos = 0;
	sort(q + 1, q + n + 1);
	build(1, 1, m);
	while (cnt < n)
	{
		if (query(1, 1, m) == 0)
		{
			if (pos == n)
				break;
			time = q[pos + 1].t;
			pos++;
			while (pos <= n && q[pos].t == time)
			{
				insert(1, q[pos].a, pos);
				pos++;
			}
			pos--;
		}
		else
		{
			int left = query(1, 1, now - 1);
			int right = query(1, now + 1, m);
			long long ls;
			if (right >= left)
				ls = workr(1, now);
			else
				ls = workl(1, now);
			if (pos == n || time + abs(now - ls) <= q[pos + 1].t)
			{
				time = time + abs(now - ls);
				now = ls;
				clear(1, ls);				
				if (time == q[pos + 1].t)
				{
					pos++;
					while (pos <= n && q[pos].t == time)
					{
						insert(1, q[pos].a, pos);
						pos++;
					}
					pos--;
				}
			}
			else
			{
				pos++;
				if (right >= left)
					now += q[pos].t - time;
				else
					now -= q[pos].t - time;
				time = q[pos].t;			
				while (pos <= n && q[pos].t == time)
				{
					insert(1, q[pos].a, pos);
					pos++;
				}
				pos--;				
			}
		}
	}
	for (int i = 1; i <= n; i++)
		printf("%lld\n", ans[i]);
	return 0;
}