#include <bits/stdc++.h>
using namespace std;
const int inf = int(1e9);
int n, t, dp[111111];
pair<int, pair<int, int> > a[111111];
set<pair<pair<int, int>, int> > S;
vector<pair<pair<int, int>, int> > v;
bool conflicts(int i, int j, int k) {
  return (max(a[i].second.first, max(a[j].second.first, a[k].second.first)) <
              min(a[i].second.second,
                  min(a[j].second.second, a[k].second.second)) &&
          a[i].first > a[j].first && a[j].first > a[k].first);
}
int main() {
  scanf("%d%d", &n, &t);
  for (int i = 0; i < n; ++i) {
    scanf("%d%d%d", &a[i].first, &a[i].second.first, &a[i].second.second);
  }
  a[n++] = make_pair(0, make_pair(-inf, inf));
  a[n++] = make_pair(t, make_pair(-inf, inf));
  sort(a, a + n);
  dp[0] = 2 * inf;
  S.insert(make_pair(make_pair(-inf, inf), 0));
  __typeof(S.begin()) it, it1, it2, fit;
  for (int i = 1; i < n; ++i) {
    int l = a[i].second.first, r = a[i].second.second;
    it1 = S.lower_bound(make_pair(make_pair(l, 0), 0));
    if (it1 != S.begin()) --it1;
    it2 = S.lower_bound(make_pair(make_pair(r, 0), 0));
    --it2;
    v.clear();
    int mx = 0, prev = -1;
    bool ok = true;
    if ((*it1).first.second <= l) {
      if (it1 == it2) ok = false;
      ++it1;
    }
    for (it = it1; ok; ++it) {
      if ((*it).first.second > l) {
        bool valid = true;
        if (prev != -1 && conflicts(i, prev, (*it).second)) valid = false;
        fit = it;
        ++fit;
        if (fit != S.end()) {
          if (conflicts(i, (*fit).second, (*it).second)) valid = false;
        }
        int j = (*it).second;
        if (valid)
          mx = max(mx,
                   min(dp[j], min(a[i].second.second, a[j].second.second) -
                                  max(a[i].second.first, a[j].second.first)));
        if ((*it).first.first < l)
          v.push_back(make_pair(make_pair((*it).first.first, l), j));
        if ((*it).first.second > r)
          v.push_back(make_pair(make_pair(r, (*it).first.second), j));
      }
      prev = (*it).second;
      if (it == it2) break;
    }
    ++it2;
    S.erase(it1, it2);
    S.insert(make_pair(make_pair(l, r), i));
    for (int k = 0; k < v.size(); ++k) {
      S.insert(v[k]);
    }
    dp[i] = mx;
  }
  printf("%d\n", dp[n - 1]);
  return 0;
}
