#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdio.h>
#include <math.h>
using namespace std;
const int inf=0x3f3f3f3f;
const int MAX=1e5+100;
int maxv[MAX][2],f[MAX][2];
int n,m;
struct sushi
{
    int val,pos;
}ar[MAX];
void init()
{
    memset(f,0,sizeof(f));
}
struct cmp
{
    bool operator()(const sushi &a,const sushi &b)
    {
        return a.pos<b.pos;
    }
};
void calmax()
{
    f[1][0]=ar[1].val-ar[1].pos;
    maxv[1][0]=max(f[1][0],0);
    for(int i=2;i<=n;i++)
    {
        f[i][0]=f[i-1][0]-(ar[i].pos-ar[i-1].pos)+ar[i].val;
        maxv[i][0]=max(maxv[i-1][0],f[i][0]);
    }
    f[n][1]=ar[n].val-(m-ar[n].pos);
    maxv[n][1]=max(f[n][1],0);
    for(int i=n-1;i>=1;i--)
    {
        f[i][1]=f[i+1][1]-(ar[i+1].pos-ar[i].pos)+ar[i].val;
        maxv[i][1]=max(maxv[i+1][1],f[i][1]);
    }
}
int main()
{
    cin>>n>>m;
    init();
    for(int i=1;i<=n;i++)scanf("%d%d",&ar[i].pos,&ar[i].val);
    sort(ar+1,ar+n+1,cmp());
    calmax();
    //for(int i=1;i<=n;i++)cout<<maxv[i][0]<<" ";cout<<endl;
    //for(int i=n;i>=1;i--)cout<<maxv[i][1]<<" ";cout<<endl;
    int ans=max(f[n][0],f[1][1]);
    for(int i=1;i<=n-1;i++)
    {
        ans=max(ans,maxv[i][0]+maxv[i+1][1]);
    }
    cout<<ans<<endl;
    //cout << "Hello world!" << endl;
    return 0;
}
