#include <bits/stdc++.h>
using namespace std;
#define N 1000000
int n, m;
int dp[N], p[N], x[N];
int dynamicProgramming(int n, int m, int p[], int x[])
{
int s = 0;
if (p[0] > 0)
s = p[0]; //更新当前位置
dp[0] = p[0] + x[0]; //初始状态
for (int i = 0; i < n; i++) //枚举跳板
{
if (dp[i] < p[i + 1]) //dp[i]:前i个跳板能到达的最远距离
{
s += p[i + 1] - dp[i];
dp[i + 1] = p[i + 1] + x[i + 1];
}
else
{
if (dp[i] < p[i + 1] + x[i + 1]) //带贪心策略
dp[i + 1] = p[i + 1] + x[i + 1];
else
dp[i + 1] = dp[i];
}
}
if (dp[n - 1] < m) //所有n个跳板能否直接跳到目的地
s += m - dp[n - 1];
return s;
}
int main()
{
cin >> n >> m; // n:跳板个数 m:总长
for (int i = 0; i < n; i++)
cin >> p[i] >> x[i]; // p:跳板位置 x:发射长度
cout << dynamicProgramming(n, m, p, x) << endl;
return 0;
}