This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define vi vector<int>
#define ii pair<int,int>
#define vb vector<bool>
#define vvi vector<vi>
#define vvb vector<vb>
#define vii vector<ii>
#define vvii vector<vii>
#define x first
#define y second
#define pb push_back
#define loop(i,s,e) for(int i=s;i<e;i++)
#define loopr(i,s,e) for(int i=e-1;i>=s;i--)
#define chkmax(a,b) a = max(a,b)
#define chkmin(a,b) a=min(a,b)
#define all(x) x.begin(),x.end()
using namespace std;
const int INF = 1e9+ 10, MOD = 1e9 + 7;
int n,m;
vii a;
struct Data{
    int l=0,r=-1;
    vii a;
    set<ii> best, reserve;
    int res = 0;
    void add(int i){
        best.insert({a[i].y, i});
        res += a[i].y;
        if (best.size()>m){
            auto it = best.begin();
            res -= it->x;
            reserve.insert({-it->x, it->y});
            best.erase(it);
        }
    }
    void remove(int i){
        auto it = best.find({a[i].y, i});
        if (it != best.end()){
            res -= it->x;
            best.erase(it);
            it = reserve.begin();
            best.insert({-it->x, it->y});
            res += -it->x;
            reserve.erase(it);
        }
        else{
            reserve.erase({-a[i].y, i});
        }
    }
    void update(int a, int b){
        /*if (a > r){
            while(l<=r) remove(l++);
            l = a, r = a-1;
        }*/
        while(b>r) add(++r);
        while(a<l) add(--l);
        while(b<r) remove(r--);
        while(a>l) remove(l++);
    }
} data;
int ans = 0;
void solve(int l, int r, int optl, int optr){
    if (r<=l) return ;
    int i = (l+r)/2;
    int ll = max(optl, i+m-1);
    int opt = ll, bestv = 0;
    loop(j,ll,optr+1){
        data.update(i, j);
        int v = data.res - (a[j].x - a[i].x);
        if (bestv < v){
            bestv = v;
            opt = j;
        }
    }
    chkmax(ans, bestv);
    solve(i+1, r, opt, optr);
    solve(l, i, optl, opt);
}
int32_t main(){
    ios_base::sync_with_stdio(false);
    cin>>n>>m;
    a.resize(n);
    loop(i,0,n) cin>>a[i].y>>a[i].x, a[i].x*=2;
    sort(all(a));
    data.a = a;
    solve(0,n-m,0,n-1);
    cout<<ans<<endl;
    return 0;
}
/*
color a
cls
g++ cake3.cpp -o a & a
5 3
2 1
4 2
6 4
8 8
10 16
*/
Compilation message (stderr)
cake3.cpp: In member function 'void Data::add(int)':
cake3.cpp:32:24: warning: comparison of integer expressions of different signedness: 'std::set<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   32 |         if (best.size()>m){
      |             ~~~~~~~~~~~^~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |