#include #include #include using namespace atcoder; using mint = modint998244353; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000000 pair op(pair a,pair b){ return max(a,b); } pair e(){ return make_pair(-Inf,-1); } int main(){ int N,D; cin>>N>>D; vector p(N),q(N); rep(i,N)cin>>p[i]>>q[i]; vector> ps; rep(i,N){ q[i] = q[i] - p[i]; p[i] *= -1; ps.emplace_back(p[i],q[i]); } sort(ps.begin(),ps.end()); vector> t(ps.size()); rep(i,ps.size()){ t[i] = make_pair(ps[i].second,i); } long long ok = Inf,ng = 0LL; while(ok-ng>1LL){ long long mid = (ok+ng)/2; long long cur = 0LL; segtree,op,e> seg(t); bool f = true; int last = -1; rep(_,D){ pair temp = make_pair(-mid - cur, -1); int d = lower_bound(ps.begin(),ps.end(),temp) - ps.begin();//distance(ps.begin,lower_bound(ps.begin(),ps.end(),temp)); auto ret = seg.prod(d,t.size()); if(ret.second==-1){ f = false; break; } cur += ret.first; if(last!=-1){ seg.set(last,make_pair(ps[last].second,last)); } last = ret.second; seg.set(last,e()); } if(f)ok = mid; else ng = mid; } cout<<-ok<