def d_recording(N, C, R):

    """

    N:録画する番組の数

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

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

    """

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

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

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



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

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

    l = max(t) * 2 + 2

    sm = [0 for _ in range(l)]  # ある時刻に動いている録画機の数が格納される



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

        tt = [0 for _ in range(l)]  # チャンネルiを録画しているか否かを格納

        # 累積和を取る

        for j in range(N):

            if c[j] == i:

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

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

                tt[s[j] * 2 - 1] += 1

                tt[t[j] * 2] -= 1

        for j in range(1, l):

            tt[j] += tt[j - 1]

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

        for j in range(l):

            if tt[j] > 0:

                sm[j] += 1

    ans = max(sm)

    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]
    """
    s = [row[0] for row in R]
    t = [row[1] for row in R]
    c = [row[2] for row in R]
    # いつまで録画機を動かすか。0.5を単位時間とするので*2
    # 時刻を0からスタートさせるので+2
    l = max(t) * 2 + 2
    sm = [0 for _ in range(l)]  # ある時刻に動いている録画機の数が格納される
    for i in range(1, C + 1):
        tt = [0 for _ in range(l)]  # チャンネルiを録画しているか否かを格納
        # 累積和を取る
        for j in range(N):
            if c[j] == i:
                # 録画開始時刻の0.5前を+1,終了時刻を-1
                # (終了時刻は含まないという録画機の条件より、このようにする)
                tt[s[j] * 2 - 1] += 1
                tt[t[j] * 2] -= 1
        for j in range(1, l):
            tt[j] += tt[j - 1]
        # あるチャンネルを録画している時間帯では、録画機を1個使わねばならない
        for j in range(l):
            if tt[j] > 0:
                sm[j] += 1
    ans = max(sm)
    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)))

-    """ -    N:録画する番組の数 -    C:テレビが受信できるチャンネルの数 -    R:録画する番組の情報 [開始時刻s,終了時刻t,チャンネルc] -    """ -    s = [row[0] for row in R] -    t = [row[1] for row in R] -    c = [row[2] for row in 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] -    l = max(t) * 2 + 2 -    sm = [0 for _ in range(l)]  # ある時刻に動いている録画機の数が格納される -    for i in range(1, C + 1): -        tt = [0 for _ in range(l)]  # チャンネルiを録画しているか否かを格納 +    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 j in range(N): -            if c[j] == i: +        for s, t, c in zip(start, end, channel_num): +            if c == channel: -                tt[s[j] * 2 - 1] += 1 -                tt[t[j] * 2] -= 1 -        for j in range(1, l): -            tt[j] += tt[j - 1] +                rec[s * 2 - 1] += 1 +                rec[t * 2] -= 1 +        rec = accumulate(rec) -        for j in range(l): -            if tt[j] > 0: -                sm[j] += 1 -    ans = max(sm) +        for j, running in enumerate(rec): +            if running > 0: +                running_recorder[j] += 1 +    ans = max(running_recorder)