#include<cstdio>
#include<utility>
#include<cstring>
#include<algorithm>
#include<vector>
#define min(a, b) a<b ? a : b
#define max(a, b) a>b ? a : b

using namespace std;

int n, m, ia[100000];
std::pair<int, int> p[100000];

struct tnode {
    int v, kol, t1, t2, off;
    tnode* left, *right;
    tnode(){v=0; kol=0; t1=0; t2=0; off=0;}
    tnode(int V){
        v=V; kol=V; t1=0; t2=0; off=0;
    }
    tnode(int V, int N){
        v=V; kol=V; t1=N; t2=N; off=0;
    }
    tnode(int V, int N, int T1, int T2){
        v=V; kol=V; t1=T1; t2=T2; off=0;
    }
    tnode(int V, int K, int T1, int T2,tnode* Left, tnode* Right){
        v=V; kol=K; t1=T1; t2=T2; off=0; left=Left; right=Right;
    }
} *a;


tnode toTree(tnode* p) {
    int c=n;
    tnode* s;
    while(c!=1) {
        tnode* s = p;
        tnode* p[c/2+1];
        int pr=c;
        for(int i=0; i<c; i+=2) {
            if(pr!=1) {
                p[i]=new tnode(min(s[i].v,s[i+1].v), s[i].v+s[i+1].v,s[i].t1, s[i+1].t2, s+i, s+i+1);
                pr-=2;
            }
        }
        c=c/2;
        if(pr==1 || pr==-1) {
            p[c-1]=&s[c-1];
            c++;
        }
    }
    return s[0];
}

int solve(tnode* targ, int off) {
    if(targ=NULL)
        return 0;

}

int main() {
    vector< pair<int, int> >so;
    scanf("%d%d", &n, &m);
    a=(tnode*)malloc(1000*sizeof(tnode));
    for(int i=0; i<n; i++)
        scanf("%d%d", &p[i].first, &p[i].second);
    sort(p, p+n);
    for(int i=0; i<n; i++)
        ia[i]=p[i].second;
    //tnode root = toTree(a);
    #define a ia
    int p=a[0];
    int min=a[0];
    int max=a[0];
    int b=1;
    int sol=0;
    for(int i=1; i<n; i++) {
        if(b && a[i]>a[i-1]) {
            b=0;
        }
        if((!b && a[i]<a[i-1])) {
            b=1;
            //a[i-1]=0;
            so.push_back(make_pair(min, max));
            sol+=max-min;
            min=a[i];
            max=a[i];
        }
            max=max(a[i], max);
            min=min(a[i], min);
            p=a[0];
    }
    sol+=max-min;
    so.push_back(make_pair(min, max));
    for(int i=0; i<n; ++i) {
        a[i]=so[i].first;
    }
/*    n=so.size();
    min=a[0];
    max=a[0];
    b=1;
    sol=0;
    for(int i=1; i<n; i++) {
        if(b && a[i]>a[i-1]) {
            b=0;
        }
        if((!b && a[i]<a[i-1])|| a[i]==0) {
            b=1;
            so.push_back(make_pair(min, max));
            sol-=min;
            min=a[i];
            max=a[i];
        }
            max=max(a[i], max);
            min=min(a[i], min);
    }


*/
    printf("%d\n", sol);

    return 0;
}
