#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
using namespace std;

class det{
	public:
		int pos;
		int vr;
};

bool  comp(det a, det b){
	if(a.pos < b.pos){
		return true;
	}
	else{
		return false;
	}
};

long long res = 0;

vector<det> d;

det u;

int n;
int m;

int find_min_pos(int sp, int ep){
	int temp = 9999999;
	int ret = 0;
	for(int i = sp; i < ep; ++i){
		temp = min(temp, d[i].vr);
		if(temp == d[i].vr){
			ret = i;
		}
	}
	return ret;
}

int find_min_val(int sp, int ep){
	int temp = 9999999;
	for(int i = sp; i < ep; ++i){
		temp = min(temp, d[i].vr);
	}
	return temp;
}

void rek(int sp, int ep){
	//cout<<sp<<" "<<ep<<endl;
	int t;int mv;
	if(ep <= sp){
		return;
	}
	//cout<<"lol"<<endl;
	mv = find_min_val(sp, ep);
	//cout<<"> "<<mv<<endl;
	if(mv > 0){
		res += mv;
		//cout<<"-> "<<res<<endl;
		for(int i = sp; i < ep; ++i){
			d[i].vr -= mv;
		}
		vector<int> nule;
		for(int i = sp; i < ep; ++i){
			if(d[i].vr == 0){
				nule.push_back(i);
			}
		}
		/*for(int i = 0; i < d.size(); ++i){
			cout<<d[i].vr<<" ";
		}
		cout<<endl;*/
		if(nule.size()){
			//cout<<"lol1"<<endl;
			rek(sp, nule[0]);
			//cout<<"-> "<<nule.size()<<endl;
			if(nule.size() >= 2){
				for(int i = 0; i < (nule.size()-1); ++i){
					//cout<<"lol2 "<<i<<" "<<nule.size()<<endl;
					rek(nule[i]+1, nule[i+1]);
				}
			}
			//cout<<"lol3"<<endl;
			rek(min(nule[nule.size()-1]+1, ep), ep);
		}
		else{
			rek(sp, ep);
		}
	}
	else{
		return;
	}
			 
}

int main(void){
	
	cin>>n>>m;
	d.reserve(10000);
	for(int i = 0; i < n; ++i){
		cin>>u.pos>>u.vr;
		d.push_back(u);
	}
	sort(d.begin(), d.end(), comp);
	rek(0, n);
	cout<<res;
	
	//cout<<endl;system("pause");
	return 0;
}
