#pragma GCC optimize("Ofast") #include using namespace std; #define REP(i,n) for(int i=0;i<(n);i++) #define RREP(i,n) for(int i=(n-1);i>=0;i--) #define ALL(v) v.begin(),v.end() const int INF=1e9+7; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int n,d;cin>>n>>d; vector p(n),q(n); REP(i,n)cin>>p[i]>>q[i]; int ok=-INF,ng=INF; while(ng-ok>1){ int mid=(ok+ng)>>1; vector dp(n+1,-INF); dp[n]=0; REP(_,d){ vector mx(n+2),mx2(n+2); mx[0]=-INF; REP(i,n+1)mx[i+1]=max(mx[i],dp[i]); mx2.back()=-INF; for(int i=n;i>=0;i--)mx2[i]=max(mx2[i+1],dp[i]); vector cpy(n+1,-INF); REP(i,n){ int pre=max(mx[i],mx2[i+1]); if(pre-p[i]>=mid)cpy[i]=pre-p[i]+q[i]; } dp=cpy; } bool fok=false; REP(i,n)if(dp[i]>-INF)fok=true; if(fok)ok=mid; else ng=mid; } cout<