

import java.io.*;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
import java.util.TreeSet;

public class C {
    String filename = "";

    final int INF = 1_000_000_000;
    class Point implements Comparable<Point>{
        long time, like;
        int num;
        Point(int t, int l, int num){
            time = t;
            like = l;
            this.num = num;
        }

        @Override
        public int compareTo(Point o) {
            if(o.time != this.time) return Long.compare(o.time, this.time);
           return Integer.compare(o.num, this.num);
        }
    }
    void solve() {
        int n =readInt();
        int k = readInt();
        Point[] a = new Point[n];
        for(int i = 0;i<n;i++){
           a[i] = new Point(readInt(),  readInt(), i);
        }
        Arrays.sort(a, Comparator.comparingLong(o -> o.like));
        TreeSet<Point> left = new TreeSet<>();
        TreeSet<Point> right = new TreeSet<>();

        for(int i = 0;i<n;i++){
            right.add(a[i]);
        }

        long summ = 0;
        int z = 0;
        for(Point i : right){
            if(z >= k) break;
            left.add(i);
            summ+=i.time;
            z++;
        }
        for(Point i : left) right.remove(i);
        long ans = 0;
        for(int i = 0;i<n;i++){
            if(left.contains(a[i])){
                summ-=a[i].time;
            }else{
                if(!left.isEmpty()) summ-=left.last().time;
            }

            ans = Math.max((summ + a[i].time) * a[i].like, ans);

            if(left.contains(a[i])){
                left.remove(a[i]);
                if(!right.isEmpty()){
                    Point q = right.pollFirst();
                    left.add(q);
                    summ+=q.time;
                }
            }else{
                right.remove(a[i]);
                if(!left.isEmpty()) summ+=left.last().time;
            }
        }
        out.print(ans);
    }

    public static void main(String[] args) throws FileNotFoundException {
        new C().run();
    }
    void run() throws FileNotFoundException {
        init();
        solve();
        out.close();
    }
    BufferedReader in;
    PrintWriter out;

    StringTokenizer tok = new StringTokenizer("");

    void init() throws FileNotFoundException {
        if(!filename.equals("")) {
            in = new BufferedReader(new FileReader(new File(filename + ".in")));
            out = new PrintWriter(new File(filename + ".out"));
            return;
        }

        in = new BufferedReader(new InputStreamReader(System.in));
        out = new PrintWriter(System.out);
    }

    String readLine(){
        try{
            return in.readLine();
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }

    String readString(){
        while(!tok.hasMoreTokens()){
            String nextLine = readLine();
            if(nextLine == null) return null;
            tok = new StringTokenizer(nextLine);
        }
        return tok.nextToken();
    }

    int readInt(){
        return Integer.parseInt(readString());
    }
    long readLong(){
        return Long.parseLong(readString());
    }
    int[] readIntArray(int n){
        int[] a = new int[n];
        for(int i = 0;i<n;i++){
            a[i] = readInt();
        }
        return a;
    }
}