#include <bits/stdc++.h>
using namespace std;
const int NIL = -1;
template <class T>
inline T mx(T a, T b) {
  return a > b ? a : b;
}
template <class T>
inline T mi(T a, T b) {
  return a < b ? a : b;
}
template <class T>
inline void sw(T &a, T &b) {
  T t = a;
  a = b;
  b = t;
}
template <class T>
inline T mabs(T x) {
  return x < 0 ? -x : x;
}
inline char gc() {
  char ret;
  while ((ret = getchar()) == ' ' || ret == '\n' || ret == '\t')
    ;
  return ret;
}
const int LIM = 3e5 + 10;
struct N {
  long long t, b, ori;
} b[LIM], t[LIM];
bool vis[LIM];
map<int, int> mp1, mp2;
inline bool cmp1(const N &a, const N &b) { return a.b < b.b; }
inline bool cmp2(const N &a, const N &b) { return a.t > b.t; }
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL), cout.tie(NULL);
  int n, k;
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> b[i].t >> b[i].b;
    b[i].ori = i;
    t[i].t = b[i].t;
    t[i].b = b[i].b;
    t[i].ori = i;
  }
  sort(b, b + n, cmp1), sort(t, t + n, cmp2);
  for (int i = 0; i < n; i++) mp1[t[i].ori] = i;
  for (int i = 0; i < n; i++) mp2[i] = mp1[b[i].ori];
  long long sum = 0;
  int cur = mi(k - 1, n - 1);
  for (int i = 0; i < n && i < k; i++) sum += t[i].t;
  long long ans = 0;
  for (int i = 0; i < n; i++) {
    long long tmp = sum;
    if (mp2[i] > cur) tmp = tmp - t[cur].t + b[i].t;
    ans = mx(ans, b[i].b * tmp);
    vis[mp2[i]] = true;
    if (mp2[i] <= cur) sum -= b[i].t;
    if (mp2[i] <= cur && cur < n) {
      cur++;
      while (cur < n && vis[cur]) cur++;
      if (cur < n) sum += t[cur].t;
    }
  }
  cout << ans;
  return 0;
}
