#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 2e5 + 5;
struct node{
int l, r, cnt, sum;
} st[maxn * 40];
int root[maxn], cnt = 0;
vector<int> cmp;
int upd(int p, int l, int r, int pos, int val){
int cur = ++cnt;
st[cur] = st[p];
st[cur].cnt++;
st[cur].sum += val;
if(l == r) return cur;
int mid = (l + r) / 2;
if(pos <= mid) st[cur].l = upd(st[p].l, l, mid, pos, val);
else st[cur].r = upd(st[p].r, mid + 1, r, pos, val);
return cur;
}
int query(int u, int v, int l, int r, int k) {
if(k <= 0) return 0;
if(l == r) return k * cmp[l - 1];
int mid = (l + r) / 2, rcnt = st[st[v].r].cnt - st[st[u].r].cnt;
if(k <= rcnt) return query(st[u].r, st[v].r, mid + 1, r, k);
return st[st[v].r].sum - st[st[u].r].sum + query(st[u].l, st[v].l, l, mid, k - rcnt);
}
bool maximize(int &a, int b){
if(a <= b){
a = b;
return true;
}
return false;
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, m; cin >> n >> m;
vector<array<int, 2>> a(n + 1);
for(int i = 1; i <= n; i++) cin >> a[i][1] >> a[i][0]; //v = 1, c = 0;
sort(a.begin() + 1, a.end());
for(int i = 1; i <= n; i++) cmp.push_back(a[i][1]);
sort(cmp.begin(), cmp.end());
cmp.erase(unique(cmp.begin(), cmp.end()), cmp.end());
for(int i = 1; i <= n; i++) root[i] = upd(root[i - 1], 1, cmp.size(), lower_bound(cmp.begin(), cmp.end(), a[i][1]) - cmp.begin() + 1, a[i][1]);
auto cost = [&](int i, int j){
return a[i][1] + a[j][1] - 2 * (a[j][0] - a[i][0]) + query(root[i], root[j - 1], 1, cmp.size(), m - 2);
};
int ans = -1e18;
function<void(int, int, int, int)> solve = [&](int l, int r, int optl, int optr){
int mid = (l + r) / 2, opt = optl, mx = -1e18;
for(int i = optl; i <= min(optr, mid - m + 1); i++){
if(maximize(mx, cost(i, mid))) opt = i;
}
ans = max(ans, mx);
if(l < mid) solve(l, mid - 1, optl, opt);
if(mid < r) solve(mid + 1, r, opt, optr);
};
solve(m, n, 1, n - m + 1);
cout << ans;
}