#include <bits/stdc++.h>
using namespace std;
const int INF = 2000000102;
int N, T;
int H[100002], L[100002], R[100002];
int pos[100002];
set<pair<pair<int, int>, int> > S;
int maxres[100002], deg[100002];
int result;
class comparator {
 public:
  inline bool operator()(const int& i1, const int& i2) { return H[i1] > H[i2]; }
};
int main() {
  scanf("%d %d", &N, &T);
  for (int i = 1; i <= N; ++i) {
    scanf("%d %d %d", &H[i], &L[i], &R[i]);
    pos[i] = i;
  }
  sort(pos + 1, pos + N + 1, comparator());
  memset(maxres, -1, sizeof(maxres));
  maxres[0] = INF;
  L[0] = -1000000001, R[0] = 1000000001;
  S.insert(make_pair(make_pair(-1000000001, 1000000001), 0));
  for (int i = 1; i <= N; ++i) {
    set<pair<pair<int, int>, int> >::iterator it = S.lower_bound(make_pair(
                                                  make_pair(L[pos[i]], -INF),
                                                  -INF)),
                                              auxit, auxcopy, last;
    bool cango = true;
    last = it;
    if (last == S.begin())
      cango = false;
    else
      --last;
    auxit = it;
    while (auxit != S.end() && auxit->first.first < R[pos[i]]) {
      if (min(R[pos[i]], auxit->first.second) -
              max(L[pos[i]], auxit->first.first) ==
          min(R[pos[i]], R[auxit->second]) - max(L[pos[i]], L[auxit->second])) {
        ++deg[auxit->second];
        maxres[pos[i]] = max(
            maxres[pos[i]],
            min(maxres[auxit->second], min(R[pos[i]], auxit->first.second) -
                                           max(L[pos[i]], auxit->first.first)));
      }
      auxcopy = auxit;
      ++auxcopy;
      int pnow = auxit->second;
      int newl = auxit->first.first, newr = auxit->first.second;
      if (newr > R[pos[i]]) {
        newl = R[pos[i]];
        S.insert(make_pair(make_pair(newl, newr), pnow));
      }
      S.erase(auxit);
      auxit = auxcopy;
    }
    if (cango) {
      auxit = last;
      if (auxit->first.second > L[pos[i]]) {
        if (min(R[pos[i]], auxit->first.second) -
                max(L[pos[i]], auxit->first.first) ==
            min(R[pos[i]], R[auxit->second]) -
                max(L[pos[i]], L[auxit->second])) {
          ++deg[auxit->second];
          maxres[pos[i]] =
              max(maxres[pos[i]], min(maxres[auxit->second],
                                      min(R[pos[i]], auxit->first.second) -
                                          max(L[pos[i]], auxit->first.first)));
        }
        if (auxit->first.second > R[pos[i]]) {
          int pnow = auxit->second;
          int newl = auxit->first.first, newr = auxit->first.second;
          int newpl = R[pos[i]], newpr = L[pos[i]];
          S.insert(make_pair(make_pair(newl, newpr), pnow));
          S.insert(make_pair(make_pair(newpl, newr), pnow));
          S.erase(auxit);
        } else {
          int pnow = auxit->second;
          int newl = auxit->first.first, newr = auxit->first.second;
          newr = L[pos[i]];
          S.insert(make_pair(make_pair(newl, newr), pnow));
          S.erase(auxit);
        }
      }
    }
    S.insert(make_pair(make_pair(L[pos[i]], R[pos[i]]), pos[i]));
  }
  for (int i = 0; i <= N; ++i)
    if (deg[i] == 0) result = max(result, maxres[i]);
  printf("%d\n", result);
}
