#include <bits/stdc++.h>
using namespace std;
const int oo = 0x3f3f3f3f;
const int maxn = 100000;
const int max_abs = (int)1e9;
struct data {
  int l, r, h;
  data() {}
  data(const int &_l, const int &_r, const int &_h) : l(_l), r(_r), h(_h) {}
};
int n, t;
data a[maxn + 5];
pair<int, int> pos[(maxn << 1) + 5];
int ans = 0;
void init() {
  scanf("%d%d", &n, &t);
  for (int i = (0), _end_ = (n); i != _end_; ++i)
    scanf("%d%d%d", &a[i].h, &a[i].l, &a[i].r),
        pos[i << 1] = make_pair(a[i].l, i),
                 pos[i << 1 | 1] = make_pair(a[i].r, -i - 1);
}
int ra[maxn + 5], rb[maxn + 5];
vector<int> v[maxn + 5];
int dp[maxn + 5];
bool cmp(const int &first, const int &second) {
  return a[first].h < a[second].h;
}
set<pair<int, int> > ed;
void solve() {
  set<pair<int, int> > all;
  sort(pos, pos + (n << 1));
  all.insert(make_pair(0, n));
  all.insert(make_pair(t, n + 1));
  memset(ra, -oo, sizeof ra);
  memset(rb, -oo, sizeof rb);
  for (int i = (0), _end_ = (n << 1); i != _end_; ++i) {
    if (pos[i].second >= 0) {
      __typeof__(all.begin()) pre = all.lower_bound(
                                  make_pair(a[pos[i].second].h, pos[i].second)),
                              nxt = pre--;
      ed.erase(make_pair(nxt->second, pre->second));
      ed.insert(make_pair(nxt->second, pos[i].second));
      ed.insert(make_pair(pos[i].second, pre->second));
      all.insert(make_pair(a[pos[i].second].h, pos[i].second));
    } else {
      int first = -pos[i].second - 1;
      all.erase(make_pair(a[first].h, first));
    }
  }
  for (__typeof__((ed).begin()) e = (ed).begin(); e != (ed).end(); ++e)
    v[e->first].push_back(e->second);
  static int pos0[maxn + 5];
  for (int i = (0), _end_ = (n); i != _end_; ++i) pos0[i] = i;
  sort(pos0, pos0 + n, cmp);
  dp[n] = 2e9;
  pos0[n] = n + 1;
  a[n] = data(-1e9, 1e9, 0);
  a[n + 1] = data(-1e9, 1e9, t);
  for (int i = (0), _end_ = (n + 1); i != _end_; ++i) {
    const int &first = pos0[i];
    for (int j = (0), _end_ = ((int((v[first]).size()))); j != _end_; ++j)
      dp[first] = max(dp[first], min(dp[v[first][j]],
                                     min(a[v[first][j]].r, a[first].r) -
                                         max(a[v[first][j]].l, a[first].l)));
  }
  ans = dp[n + 1];
}
void output() { printf("%d\n", ans); }
int main() {
  init();
  solve();
  output();
  return 0;
}
