import heapq

N, M = list(map(int, input().split()))



W = []  # 取り組める仕事のリスト

for _ in range(N):

    W.append(tuple(map(int, input().split())))

W = sorted(W, key=lambda x: (x[0], -x[1]))





a = []

heapq.heapify(a)  # リストaのheap化



ans = 0

c = 0

for day in range(1, M+1):

    day_c = 0

    while c != N and W[c][0] == day:

        if day_c <= M-day:

            x = W[c][1]

            heapq.heappush(a, -x)  # heap化されたリストaに要素xを追加

            day_c += 1

        c += 1

    if len(a) >= 1:

        ans += -heapq.heappop(a)  # heap化されたリストaから最小値を削除＆その最小値を出力



print(ans)

import heapq

N, M = list(map(int, input().split()))



AB = []

for _ in range(N):

    A, B = list(map(int, input().split()))

    AB.append((A, B))

AB = sorted(AB, key=lambda x: x[0])



hq = []

heapq.heapify(hq)  # リストhqのheap化



ans = 0

i = 0

for d in range(1, M+1):

    while i <= N-1 and AB[i][0] <= d:

        heapq.heappush(hq, -AB[i][1])  # heap化されたリストhqに要素xを追加

        i += 1

    if hq:

        ans -= heapq.heappop(hq)  # heap化されたリストhqから最小値を削除＆その最小値を出力

print(ans)

import heapq

N, M = list(map(int, input().split()))
W = []  # 取り組める仕事のリスト
for _ in range(N):
    W.append(tuple(map(int, input().split())))
W = sorted(W, key=lambda x: (x[0], -x[1]))
a = []
heapq.heapify(a)  # リストaのheap化
ans = 0
c = 0
for day in range(1, M + 1):
    day_c = 0
    while c != N and W[c][0] == day:
        if day_c <= M - day:
            x = W[c][1]
            heapq.heappush(a, -x)  # heap化されたリストaに要素xを追加
            day_c += 1
        c += 1
    if len(a) >= 1:
        ans += -heapq.heappop(a)  # heap化されたリストaから最小値を削除＆その最小値を出力
print(ans)

import heapq

N, M = list(map(int, input().split()))
AB = []
for _ in range(N):
    A, B = list(map(int, input().split()))
    AB.append((A, B))
AB = sorted(AB, key=lambda x: x[0])
hq = []
heapq.heapify(hq)  # リストhqのheap化
ans = 0
i = 0
for d in range(1, M + 1):
    while i <= N - 1 and AB[i][0] <= d:
        heapq.heappush(hq, -AB[i][1])  # heap化されたリストhqに要素xを追加
        i += 1
    if hq:
        ans -= heapq.heappop(hq)  # heap化されたリストhqから最小値を削除＆その最小値を出力
print(ans)

-W = []  # 取り組める仕事のリスト +AB = [] -    W.append(tuple(map(int, input().split()))) -W = sorted(W, key=lambda x: (x[0], -x[1])) -a = [] -heapq.heapify(a)  # リストaのheap化 +    A, B = list(map(int, input().split())) +    AB.append((A, B)) +AB = sorted(AB, key=lambda x: x[0]) +hq = [] +heapq.heapify(hq)  # リストhqのheap化 -c = 0 -for day in range(1, M + 1): -    day_c = 0 -    while c != N and W[c][0] == day: -        if day_c <= M - day: -            x = W[c][1] -            heapq.heappush(a, -x)  # heap化されたリストaに要素xを追加 -            day_c += 1 -        c += 1 -    if len(a) >= 1: -        ans += -heapq.heappop(a)  # heap化されたリストaから最小値を削除＆その最小値を出力 +i = 0 +for d in range(1, M + 1): +    while i <= N - 1 and AB[i][0] <= d: +        heapq.heappush(hq, -AB[i][1])  # heap化されたリストhqに要素xを追加 +        i += 1 +    if hq: +        ans -= heapq.heappop(hq)  # heap化されたリストhqから最小値を削除＆その最小値を出力