Problem:
Score : 400 points

Problem Statement

There are N one-off jobs available. If you take the i-th job and complete it, you will earn the reward of B_i after A_i days from the day you do it.

You can take and complete at most one of these jobs in a day.

However, you cannot retake a job that you have already done.

Find the maximum total reward that you can earn no later than M days from today.

You can already start working today.

Constraints

All values in input are integers.

1 \leq N \leq 10^5

1 \leq M \leq 10^5

1 \leq A_i \leq 10^5

1 \leq B_i \leq 10^4

Input

Input is given from Standard Input in the following format:

N M
A_1 B_1
A_2 B_2
\vdots
A_N B_N

Output

Print the maximum total reward that you can earn no later than M days from today.

Sample Input 1

3 4
4 3
4 1
2 2

Sample Output 1

5

You can earn the total reward of 5 by taking the jobs as follows:

Take and complete the first job today. You will earn the reward of 3 after four days from today.

Take and complete the third job tomorrow. You will earn the reward of 2 after two days from tomorrow, that is, after three days from today.

Sample Input 2

5 3
1 2
1 3
1 4
2 1
2 3

Sample Output 2

10

Sample Input 3

1 1
2 1

Sample Output 3

0

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                    //
//	                                      Created by Aeren                                            //
//                                                                                                    //
////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                    //
//                                                                                                    //
//                                              ______________                                        //
//             ++++++++++                ___----------------------__                                  //
//           +++`+``+`+`++++        ///``````````````````````````````\\\                              //
//           ++`+`+``+++`++++  /////```````````````````````````````````\\\                            //
//           +++`++`+`+``+++/////````````````````````````````````````````\\\                          //
//             +++`++`+``+///```````````|````````` ````````````````````````\\\                        //
//          ____++++/++++/`````````````/````````|````````|```````````````````\\                       //
//        /    / /|    //``````````````|````````|```````|`````````````````````\\                      //
//       |   /  //| ///````````/```````|```````||```````|````````|``````````````\\                    //
//        \ /_/ / |///.````````|``````/````````|````````|````````|````````.````` \                    //
//        /|\_|_/ |-...````````|``````|````````|`````````|`````.`|````````````````\                   //
//       / \__|__/--...````````|.````|````````:|````````|:`````::|::`````|`````````|                  //
//      /     /  /:...````````|/`    |        :|        :|       |```````|``++````++                  //
//      |    / //::...````````|      |        |:        :|       |       |```++``++||                 //
//     /    /  /-:-`..````````/    _.::::.    |         :       :        |``` `++``||                 //
//     |   /  --:-.`.-```````|            ``           `       `        `|```++``++`|                 //
//     |  /    /:-....```````|                                           |``++````++|                 //
//     | /     /-....````````|                              _.-:::.      |..````.`..|                 //
//     |/     /-.````````````.                                     `     .``````.`.`|\                //
//    /|      |-``````````````                    :'                    .|`````````.||                //
//   / |     `|.`````````````.                                         -|-|`````````\\                //
//  /  |     `|````.`````````-                                        --||`````````.|\\               //
//            |``````````````|::                                    :..-||`````````|``|               //
//			  \\`````````````|:::.        `...                    .\___/-|`````````|``|               //
//			  \\`````````````|::::-           `:::....           --::/:::|`````````.``\               //
//			   \\````````````|::::`|.                          .:::/:::::-|````````|``|               //
//      	    \```.````````|::::/|--.                     .-:/:::/:::::/````````//``\               //
//      	     \\`.````````-:::|`|-----              ..-:|:::/::::::::|-``/|````/  `\`              //
//      	      \`.````````-|:::\|-----`-.___......------/:::/::::::::|.`//|```/     \              //
//                 \\-```|\````|```\_________````__________/\---::::::::|                             //
//                  .\.``| \```|```....-.---`\`./:-:--...````\`.\\\:::::|                             //
//                  __\``|_/\``|------------:-\/-----::-..````\_________|__                           //
//                                                                                                    //
////////////////////////////////////////////////////////////////////////////////////////////////////////

#include<bits/stdc++.h>
#include<chrono>
#pragma GCC optimize("Ofast")
using namespace std;
using namespace chrono;
#define all(a) a.begin(), a.end()
#define sz(x) (int(x.size()))
typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<int, ll> pil;
typedef vector<string> vs;
template<class T1, class T2>
istream &operator>>(istream &in, pair<T1, T2> &P){
	in >> P.first >> P.second;
	return in;
}
template<class T1, class T2>
ostream &operator<<(ostream &out, pair<T1, T2> &P){
	out << "(" << P.first << ", " << P.second << ")";
	return out;
}
template<class T>
istream &operator>>(istream &in, vector<T> &arr){
	for(auto &x: arr) in >> x;
	return in;
}
template<class T>
ostream &operator<<(ostream &out, vector<T> &arr){
	for(auto &x: arr) out << x << ' '; cout << "\n";
	return out;
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n, m;
	cin >> n >> m;
	vector<pii> a(n);
	cin >> a;
	sort(all(a), greater<pii>());
	multiset<int, greater<int>> q;
	int res = 0;
	for(int i = m - 1; i >= 0; i --){
		while(!a.empty() && a.back().first == m - i){
			q.insert(a.back().second);
			a.pop_back();
		}
		if(!q.empty()){
			res += *q.begin();
			q.erase(q.begin());
		}
	}
	cout << res;
	return 0;
}