# include <cstdio>
# include <iostream>
# include <vector>
# include <set>
# include <algorithm>
# include <cstring>

using namespace std;

const int MAXN = 100010;
const int INF = 1000000010; // 10^9 + 10

vector < pair<int, int> > brojevi;
vector < pair<int, int> > obratno, obratno2;
int N, M, t, t1, t2;

int nadji_najmanji( int a, int b ){
	int mini = INF;
	for( int i = a ; i <= b ; ++i ){
		mini = min( mini, brojevi[ i ].second );
	}
	return mini;
}

bool cmp( pair<int, int> a, pair<int, int> b ){
	return a.first < b.first;
}

long long rek( int a, int b, int vis ){
	if( a > b ) return 0;
	if( a == b ) return brojevi[ a ].second - vis;
	long long sol = 0;
	int najmalen = nadji_najmanji( a, b );
	sol += najmalen;
	pair< vector< pair<int, int> >::iterator, vector< pair<int, int> >::iterator > range;
	range = equal_range( obratno.begin(), obratno.end(), make_pair( vis + najmalen, 0 ), cmp ); 
	int last = a;
	for( ; range.first != range.second ; ++range.first ){
		sol += rek( last, ( *( range.first ) ).second - 1, vis + najmalen );
		last = ( *( range.first ) ).second + 1;
	}
	sol += rek( last, b, vis + najmalen );
	return sol;
}

int main( void ){
	scanf( "%d %d", &N, &M );
	for( int i = 0 ; i < N ; ++i ){
		scanf( "%d %d", &t1, &t2 );
		brojevi.push_back( make_pair( t1, t2 ) );
		obratno2.push_back( make_pair( t2, t1 ) );
	}
	sort( brojevi.begin(), brojevi.end() );
	sort( obratno2.begin(), obratno2.end() );
	for( int i = 0 ; i < N ; ++i ){
		obratno.push_back( make_pair( obratno2[ i ].first, lower_bound( brojevi.begin(), brojevi.end(), make_pair( obratno2[ i ].second, -1 ) ) - brojevi.begin() ) );
	}
	printf( "%lld\n", rek( 0, N - 1, 0 ) );
	// system( "PAUSE" );
	return 0;
}
