#include <bits/stdc++.h>   using namespace std;   class MinHeap {     vector<long long int> arr;     long long int size;       public:     MinHeap() { size = 0; }     long long int parent(long long int i) { return (i - 1) / 2; }     long long int lchild(long long int i) { return 2 * i + 1; }     long long int rchild(long long int i) { return 2 * i + 2; }     long long int minimum() { return arr[0]; }     long long int length() { return size; }     void insert(long long int i) {       size++;       arr.push_back(i);       long long int index = size - 1;       while (i != 0 && arr[parent(index)] > arr[index]) {         swap(arr[parent(index)], arr[index]);         index = parent(index);       }     }     void minheapify_down(long long int i) {       while (i < size) {         long long int l = lchild(i);         long long int r = rchild(i);         long long int small = i;         if (l < size) small = arr[small] < arr[l] ? small : l;         if (r < size) small = arr[small] < arr[r] ? small : r;         swap(arr[i], arr[small]);         if (i == small) break;         i = small;       }     }     void minheapify_up(long long int i) {       long long int index = i;       while (i != 0 && arr[parent(index)] > arr[index]) {         swap(arr[parent(index)], arr[index]);         index = parent(index);       }     }     void extractmin() {       long long int min = arr[0];       swap(arr[0], arr[size - 1]);       arr.pop_back();       size--;       minheapify_down(0);     }     void changekey(long long int i, long long int value) {       if (value > arr[i]) {         arr[i] = value;         minheapify_down(i);       } else {         arr[i] = value;         minheapify_up(i);       }     }     void deletekey(long long int i) {       changekey(i, LLONG_MIN);       extractmin();     }   };   int main() {     ;     ios::sync_with_stdio(0);     cin.tie(0);     ;     long long int n, k, t, b, ans = 0, count = 0, sum = 0;     cin >> n >> k;     vector<vector<long long int>> beauti(1000001);     for (long long int i = 0; i < n; i++) {       cin >> t >> b;       beauti[b].push_back(t);     }     MinHeap length;     for (long long int i = 1000000; i >= 1; i--) {       if (beauti[i].size() != 0) {         for (long long int j = 0; j < beauti[i].size(); j++) {           sum += beauti[i][j];           length.insert(beauti[i][j]);           count++;           if (count > k) {             long long int ele = length.minimum();             sum -= ele;             length.deletekey(0);             count--;           }         }         ans = max(ans, i * sum);       }     }     cout << ans;     return 0;   }   