def d_recording(N, C, R):

    # N:録画する番組の数

    # C:テレビが受信できるチャンネルの数

    # R:録画する番組の情報 [開始時刻s,終了時刻t,チャンネルc]

    from itertools import accumulate

    start = [row[0] for row in R]

    end = [row[1] for row in R]

    channel_num = [row[2] for row in R]



    # いつまで録画機を動かすか。0.5を単位時間とするので*2

    # 時刻を0からスタートさせるので+2

    l = max(end) * 2 + 2

    running_recorder = [0 for _ in range(l)]  # [k]:ある時刻に動作中の録画機の数



    for channel in range(1, C + 1):

        rec = [0 for _ in range(l)]  # [k]:チャンネルkを録画しているか否か

        # 累積和を取る

        for s, t, c in zip(start, end, channel_num):

            if c == channel:

                # 録画開始時刻の0.5前を+1,終了時刻を-1

                # (終了時刻は含まないという録画機の条件より、このようにする)

                rec[s * 2 - 1] += 1

                rec[t * 2] -= 1

        rec = accumulate(rec)

        # あるチャンネルを録画している時間帯では、録画機を1個使わねばならない

        for j, running in enumerate(rec):

            if running > 0:

                running_recorder[j] += 1

    ans = max(running_recorder)

    return ans



N, C = [int(i) for i in input().split()]

R = [[int(i) for i in input().split()] for j in range(N)]

print((d_recording(N, C, R)))
def d_recording(N, C, R):

    # N:録画する番組の数

    # C:テレビが受信できるチャンネルの数

    # R:録画する番組の情報 [開始時刻s,終了時刻t,チャンネルc]

    from itertools import accumulate



    # いつまで録画機を動かすか。終了時刻の最大値10**5, 単位時間を0.5とするので*2

    # 時刻を0からスタートさせるので+1, 累積和のために+1

    l = 10**5 * 2 + 2

    running_recorder = [0] * l  # [k]:ある時刻に動作中の録画機の数



    for channel in range(1, C + 1):

        rec = [0] * l  # [k]:チャンネルkを録画しているか否か

        # 累積和を取る

        for s, t, c in R:

            if c == channel:

                # 録画開始時刻の0.5前を+1,終了時刻を-1

                # (終了時刻は含まないという録画機の条件より、このようにする)

                rec[s * 2 - 1] += 1

                rec[t * 2] -= 1

        rec = accumulate(rec)

        # あるチャンネルを録画している時間帯では、録画機を1個使わねばならない

        for j, running in enumerate(rec):

            if running > 0:

                running_recorder[j] += 1

    ans = max(running_recorder)

    return ans



N, C = [int(i) for i in input().split()]

R = [[int(i) for i in input().split()] for j in range(N)]

print((d_recording(N, C, R)))
def d_recording(N, C, R):
    # N:録画する番組の数
    # C:テレビが受信できるチャンネルの数
    # R:録画する番組の情報 [開始時刻s,終了時刻t,チャンネルc]
    from itertools import accumulate

    start = [row[0] for row in R]
    end = [row[1] for row in R]
    channel_num = [row[2] for row in R]
    # いつまで録画機を動かすか。0.5を単位時間とするので*2
    # 時刻を0からスタートさせるので+2
    l = max(end) * 2 + 2
    running_recorder = [0 for _ in range(l)]  # [k]:ある時刻に動作中の録画機の数
    for channel in range(1, C + 1):
        rec = [0 for _ in range(l)]  # [k]:チャンネルkを録画しているか否か
        # 累積和を取る
        for s, t, c in zip(start, end, channel_num):
            if c == channel:
                # 録画開始時刻の0.5前を+1,終了時刻を-1
                # (終了時刻は含まないという録画機の条件より、このようにする)
                rec[s * 2 - 1] += 1
                rec[t * 2] -= 1
        rec = accumulate(rec)
        # あるチャンネルを録画している時間帯では、録画機を1個使わねばならない
        for j, running in enumerate(rec):
            if running > 0:
                running_recorder[j] += 1
    ans = max(running_recorder)
    return ans


N, C = [int(i) for i in input().split()]
R = [[int(i) for i in input().split()] for j in range(N)]
print((d_recording(N, C, R)))

def d_recording(N, C, R):
    # N:録画する番組の数
    # C:テレビが受信できるチャンネルの数
    # R:録画する番組の情報 [開始時刻s,終了時刻t,チャンネルc]
    from itertools import accumulate

    # いつまで録画機を動かすか。終了時刻の最大値10**5, 単位時間を0.5とするので*2
    # 時刻を0からスタートさせるので+1, 累積和のために+1
    l = 10**5 * 2 + 2
    running_recorder = [0] * l  # [k]:ある時刻に動作中の録画機の数
    for channel in range(1, C + 1):
        rec = [0] * l  # [k]:チャンネルkを録画しているか否か
        # 累積和を取る
        for s, t, c in R:
            if c == channel:
                # 録画開始時刻の0.5前を+1,終了時刻を-1
                # (終了時刻は含まないという録画機の条件より、このようにする)
                rec[s * 2 - 1] += 1
                rec[t * 2] -= 1
        rec = accumulate(rec)
        # あるチャンネルを録画している時間帯では、録画機を1個使わねばならない
        for j, running in enumerate(rec):
            if running > 0:
                running_recorder[j] += 1
    ans = max(running_recorder)
    return ans


N, C = [int(i) for i in input().split()]
R = [[int(i) for i in input().split()] for j in range(N)]
print((d_recording(N, C, R)))

-    start = [row[0] for row in R] -    end = [row[1] for row in R] -    channel_num = [row[2] for row in R] -    # いつまで録画機を動かすか。0.5を単位時間とするので*2 -    # 時刻を0からスタートさせるので+2 -    l = max(end) * 2 + 2 -    running_recorder = [0 for _ in range(l)]  # [k]:ある時刻に動作中の録画機の数 +    # いつまで録画機を動かすか。終了時刻の最大値10**5, 単位時間を0.5とするので*2 +    # 時刻を0からスタートさせるので+1, 累積和のために+1 +    l = 10**5 * 2 + 2 +    running_recorder = [0] * l  # [k]:ある時刻に動作中の録画機の数 -        rec = [0 for _ in range(l)]  # [k]:チャンネルkを録画しているか否か +        rec = [0] * l  # [k]:チャンネルkを録画しているか否か -        for s, t, c in zip(start, end, channel_num): +        for s, t, c in R: