import java.util.PriorityQueue;
import java.util.Queue;

public class Main
{

	public static void main(String[] args)
	{
		java.util.Scanner scan=new java.util.Scanner(System.in);
		int n=scan.nextInt();
		int k=scan.nextInt();
		int[]arr=new int[n];
		int[]brr=new int[n];
		for(int i=0;i<n;i++) {
			arr[i]=scan.nextInt();
			brr[i]=scan.nextInt();
		}
		int[]index=new int[n];
		int[]index2=new int[n];
		for(int i=0;i<n;i++)index[i]=i;
		for(int dis=1;dis<n;dis<<=1) {
			for(int pos=0;pos<n;pos+=2*dis) {
				int p1=pos,p2=pos+dis,p=pos;
				while(p<dis*2+pos&&p<n) {
					if(p1>=pos+dis)index2[p++]=index[p2++];
					else if(p2>=pos+2*dis||p2>=n)index2[p++]=index[p1++];
					else {
						//使用时只需修改这里小于的判断条件
						if(brr[index[p1]]<brr[index[p2]])index2[p++]=index[p1++];
						else index2[p++]=index[p2++];
					}
				}
			}
			for(int i=0;i<n;i++)index[i]=index2[i];
		}
		Queue<Integer>pq=new PriorityQueue<Integer>();
		long pq_sum=0;
		long res=0;
		int pq_size=0;
		for(int i=n-1;i>=0;i--) {
			int a=arr[index[i]];
			int b=brr[index[i]];
			int top=0;
			if(!pq.isEmpty())top=pq.peek();
			if(pq_size<k) {
				pq.add(a);
				pq_size++;
				pq_sum+=a;
			}
			else if(a>top) {
				pq.poll();
				pq.add(a);
				pq_sum+=(a-top);
			}
			res=Math.max(res, (long)pq_sum*b);
		}
		System.out.println(res);
	}
}