program kadai
    implicit none
	integer  ::  n,m
	integer,allocatable  ::  a(:),b(:)
	integer  ::  i,j,today,money,check

    read(*,*) n,m
    allocate(a(n))
    allocate(b(n))

    do i=1,n
        read(*,*) a(i),b(i)
    end do

    money=0
    do i=1,m
        today=0
        call qsort(a,b)
        do j=1,n
            if (a(j)<i+1) then
                if (b(j)>today) then
                    today=b(j)
                    check=j
                end if
            end if
            if (a(j)>i) then
                exit
            end if
        end do
        if (check>0) then
            a(check)=m+1
            b(check)=0
        end if
        money=money+today
    end do

    write(*,*) money
stop
contains

subroutine swap(a,b)
    implicit none
    integer,intent(inout)  ::  a,b
    integer  ::  c
    c=a
    a=b
    b=c
end subroutine swap

subroutine qsort(x,y)
    implicit none
    integer, intent(inout)  ::  x(:)
    integer, intent(inout)  ::  y(:)
    integer  ::  first,last
    first=1
    last=size(x)
    call q2sort(x,y,first,last)
    return
end subroutine qsort

recursive subroutine q2sort(x,y,first,last)
    implicit none
    integer, intent(inout)  ::  x(:)
    integer, intent(inout)  ::  y(:)
    integer, intent(inout) ::  first,last
    integer  ::  fir, las
    integer  ::  i,j
    integer  ::  n
    n=x((first+last)/2)
    i=first
    j=last
    do
        do while (x(i)<n)
            i=i+1
        end do
        do while(x(j)>n)
            j=j-1
        end do
        if (i>j .or. i==j) then
            exit
        end if
        call swap(x(i),x(j))
        call swap(y(i),y(j))
        i=i+1
        j=j-1
    end do
    if (first<i-1) then
        las=i-1
        call q2sort(x,y,first,las)
    end if
    if (last>j+1) then
        fir=j+1
        call q2sort(x,y,fir,last)
    end if
end subroutine q2sort


end program kadai
