#include<iostream>
#include<stdio.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int dp[N];
int x[85],r[85];
int main() {
int n,m;
scanf("%d%d",&n,&m);
for(int i=1; i<=n; ++i) {
scanf("%d%d",x+i,r+i);
}
dp[m+1]=0;
for(int i=m; i>=1; --i) {
int pos=i;
dp[i]=1+dp[i+1];//从右往左
for(int j=1; j<=n; ++j) {
int _x=x[j],_r=r[j];
if(_x>=pos) {//如果在某个天线的左边
if(_x-_r<=pos) {//如果在天线的覆盖范围之内
dp[i]=min(dp[i],dp[min(m+1,_x+_r+1)]);//就不用花费,往前面倒腾,而且不能出界
} else {//如果不在覆盖范围之内
dp[i]=min(dp[i],_x-_r-pos+dp[min(m+1,2*_x-pos+1)]);//扩展距离的费用 + 原本需要花费的钱
//_x-(pos-x) 也是往前倒腾 因为往左扩展的同时也会往右扩展
//而此时左边还没有赋值,就往前
}
} else {//如果在某个天线的右边
if(_x+_r>=pos) {//如果在范围之内
dp[i]=min(dp[i],dp[min(m+1,_x+_r+1)]);//同理,往前搞
}
//在右边的情况不用讨论,因为它一定会在某个天线的右边
//当位于最右边且且覆盖不的时候,第19行已经进行了处理
}
}
}
printf("%d\n",dp[1]);
}
/*
dp[m+1]=0,我们接下来从大到小遍历pos pospos,来求出dp[] dp[]dp[],假设现在要求dp[pos] dp[pos]dp[pos],那么我们枚举所有的电线杆
dp[pos]=1+dp[pos+1] dp[pos]=1+dp[pos+1]dp[pos]=1+dp[pos+1],代表从x-1位置扩展到x
当Xi>=pos,且Xi-ri<=pos,则dp[pos]=min(dp[pos],dp[min(xi+ri+1,m+1)]) 要判段是否出界
当Xi>=pos,且Xi-ri>pos ,dp[pos]=min(dp[pos],xi-ri-pos+dp[min(2*xi-pos+1,m+1)])
当xi<pos,且xi+ri>=pos,则dp[pos]=min(dp[pos],dp[min(xi+ri+1,m+1)])
当xi<pos,且xi+ri<pos,则不用当前 antenna扩展
*/