#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5;
struct SEG {
  int h, l, r, i;
  SEG() {}
  SEG(int a, int b, int c, int d) : h(a), l(b), r(c), i(d) {}
  bool operator<(const SEG &x) const {
    if (h != x.h) return h < x.h;
    if (l != x.l) return l < x.l;
    if (r != x.r) return r < x.r;
    return 0;
  }
};
SEG a[maxn];
struct SEGT {
  int sz, arr[maxn << 2], lazy[maxn << 2];
  void init(int _n) {
    sz = 1;
    while (sz <= _n) sz <<= 1;
    memset(arr, -1, sizeof arr);
    memset(lazy, -1, sizeof lazy);
  }
  inline void pushdown(int i) {
    if (~lazy[i]) {
      arr[i] = lazy[i];
      if (i < sz) {
        lazy[i << 1] = lazy[i];
        lazy[i << 1 | 1] = lazy[i];
      }
      lazy[i] = -1;
    }
  }
  void set(int a, int b, int i, int l, int r, int val) {
    pushdown(i);
    if (l <= a && b <= r) {
      lazy[i] = val;
      pushdown(i);
      return;
    }
    if (r <= a || b <= l) {
      return;
    }
    set(a, (a + b) >> 1, i << 1, l, r, val);
    set((a + b) >> 1, b, i << 1 | 1, l, r, val);
    if (!~arr[i << 1 | 1] || ::a[arr[i << 1]].h < ::a[arr[i << 1 | 1]].h)
      arr[i] = arr[i << 1];
    else
      arr[i] = arr[i << 1 | 1];
  }
  int get(int a, int b, int i, int l, int r) {
    pushdown(i);
    if (l <= a && b <= r) return arr[i];
    if (r <= a || b <= l) return -1;
    int x = get(a, (a + b) >> 1, i << 1, l, r);
    int y = get((a + b) >> 1, b, i << 1 | 1, l, r);
    if (!~x) return y;
    if (!~y) return x;
    if (::a[x].h < ::a[y].h) return x;
    return y;
  }
};
SEGT segt;
vector<int> g[maxn];
int n, t, h[maxn], l[maxn], r[maxn], v[maxn], m, dp[maxn];
int solvedp(int u) {
  if (~dp[u]) return dp[u];
  int ans = 0;
  for (int v : g[u]) {
    int c = min(r[u], r[v]) - max(l[u], l[v]);
    ans = max(ans, min(solvedp(v), c));
  }
  return dp[u] = ans;
}
int main() {
  scanf("%d%d", &n, &t);
  v[m++] = -1e9;
  v[m++] = 1e9;
  l[n] = l[n + 1] = -1e9;
  r[n] = r[n + 1] = 1e9;
  for (int i = 0; i < n; i++) {
    scanf("%d%d%d", h + i, l + i, r + i);
    v[m++] = l[i];
    v[m++] = r[i];
    a[i] = SEG(h[i], l[i], r[i], i);
  }
  a[n] = SEG(0, -1e9, 1e9, n);
  a[n + 1] = SEG(t, -1e9, 1e9, n + 1);
  sort(a, a + n + 2);
  sort(v, v + m);
  m = unique(v, v + m) - v;
  segt.init(m);
  for (int i = 0; i <= n + 1; i++) a[i].h *= -1;
  segt.set(0, segt.sz, 1, 0, m - 1, 0);
  for (int i = 1; i <= n + 1; i++) {
    int l = lower_bound(v, v + m, a[i].l) - v;
    int r = lower_bound(v, v + m, a[i].r) - v;
    int x;
    x = segt.get(0, segt.sz, 1, l, l + 1);
    if (~x) {
      int l1 = lower_bound(v, v + m, a[x].l) - v;
      int r1 = lower_bound(v, v + m, a[x].r) - v;
      if (segt.get(0, segt.sz, 1, max(l1, l), min(r, r1)) == x)
        g[a[i].i].push_back(a[x].i);
    }
    x = segt.get(0, segt.sz, 1, r, r + 1);
    if (~x) {
      int l1 = lower_bound(v, v + m, a[x].l) - v;
      int r1 = lower_bound(v, v + m, a[x].r) - v;
      if (segt.get(0, segt.sz, 1, max(l1, l), min(r, r1)) == x)
        g[a[i].i].push_back(a[x].i);
    }
    segt.set(0, segt.sz, 1, l, r + 1, i);
  }
  for (int i = 0; i <= n + 1; i++) a[i].h *= -1;
  segt.set(0, segt.sz, 1, 0, m - 1, n + 1);
  for (int i = n; i >= 0; i--) {
    int l = lower_bound(v, v + m, a[i].l) - v;
    int r = lower_bound(v, v + m, a[i].r) - v;
    int x;
    x = segt.get(0, segt.sz, 1, l, l + 1);
    if (~x) {
      int l1 = lower_bound(v, v + m, a[x].l) - v;
      int r1 = lower_bound(v, v + m, a[x].r) - v;
      if (segt.get(0, segt.sz, 1, max(l1, l), min(r, r1)) == x)
        g[a[x].i].push_back(a[i].i);
    }
    x = segt.get(0, segt.sz, 1, r, r + 1);
    if (~x) {
      int l1 = lower_bound(v, v + m, a[x].l) - v;
      int r1 = lower_bound(v, v + m, a[x].r) - v;
      if (segt.get(0, segt.sz, 1, max(l1, l), min(r, r1)) == x)
        g[a[x].i].push_back(a[i].i);
    }
    segt.set(0, segt.sz, 1, l, r, i);
  }
  for (int i = 0; i <= n + 1; i++) {
    sort(g[i].begin(), g[i].end());
    g[i].erase(unique(g[i].begin(), g[i].end()), g[i].end());
  }
  memset(dp, -1, sizeof dp);
  dp[n] = 2e9;
  printf("%d\n", solvedp(n + 1));
  return 0;
}
