# coding: utf-8
import array, bisect, collections, copy, heapq, itertools, math, random, re, string, sys, time
sys.setrecursionlimit(10 ** 7)
INF = 10 ** 20
MOD = 10 ** 9 + 7


def II(): return int(input())
def ILI(): return list(map(int, input().split()))
def IAI(LINE): return [ILI() for __ in range(LINE)]
def IDI(): return {key: value for key, value in ILI()}


def read():
    N, M = ILI()
    people = [ILI() for __ in range(N)]
    return N, M, people


def solve(N, M, people):
    bool_chair = [False] * (M + 2)
    bool_chair[0], bool_chair[M + 1] = True, True
    people.sort(key=lambda x: (-x[0], x[1]))
    ans = 0
    for person in people:
        update = False
        for i in range(person[0], 0, -1):
            if bool_chair[i] is False:
                bool_chair[i] = True
                update = True
                break
        if update is False:
            for i in range(person[1], M + 1):
                if bool_chair[i] is False:
                    bool_chair[i] = True
                    update = True
                    break
            if update is False:
                ans += 1
    return ans


def main():
    params = read()
    print(solve(*params))


if __name__ == "__main__":
    main()
