#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
struct node {
  int h, l, r;
  int id;
  bool operator<(const node &ot) const { return h > ot.h; }
} a[(300000 + 10)];
int n, t;
int dp[(300000 + 10)];
void update(int i, int j) {
  dp[i] = max(dp[i], min(dp[j], min(a[i].r, a[j].r) - max(a[i].l, a[j].l)));
}
void data() {
  freopen("in.txt", "w", stdout);
  srand(time(0));
  int n = 1000, t = rand();
  printf("%d %d\n", n, t + 1);
  for (int i = 0; i < n; ++i) {
    int h = rand() % t + 1;
    int l = rand();
    int r = rand();
    if (l > r) swap(l, r);
    printf("%d %d %d\n", h, l, r);
  }
}
set<pair<int, int> > s;
set<pair<int, int> >::iterator st, it, pre, nxt;
int main() {
  scanf("%d%d", &n, &t);
  a[0].h = 1e9, a[0].l = -2e9, a[0].r = 2e9;
  dp[0] = 2e9;
  a[n + 1].h = -1, a[n + 1].l = -1e9, a[n + 1].r = 1e9;
  for (int i = 1; i <= n; ++i) {
    scanf("%d%d%d", &a[i].h, &a[i].l, &a[i].r);
  }
  sort(a + 1, a + n + 1);
  s.insert(make_pair(-1e9, 0));
  s.insert(make_pair(1e9, 0));
  for (int i = 1; i <= n + 1; ++i) {
    st = s.lower_bound(make_pair(a[i].l, i));
    for (it = st, it--; it->first < a[i].r; ++it) {
      pre = it;
      if (pre != s.begin()) --pre;
      nxt = it;
      nxt++;
      int j = it->second, l = pre->second, r = nxt->second;
      if ((a[j].h <= a[l].h || a[j].l >= a[l].r || a[l].r <= a[i].l) &&
          (a[j].h <= a[r].h || a[j].r <= a[r].l || a[r].l >= a[i].r))
        dp[i] =
            max(dp[i], min(dp[j], min(a[i].r, a[j].r) - max(a[i].l, a[j].l)));
    }
    it--;
    int j = it->second;
    s.erase(st, ++it);
    if (a[i].r != it->first) s.insert(make_pair(a[i].r, j));
    s.insert(make_pair(a[i].l, i));
  }
  printf("%d\n", dp[n + 1]);
}
