
import java.io.*;
import java.util.*;

public class Sol {
	 static class FastReader 
	    { 
	        final private int BUFFER_SIZE = 1 << 16; 
	        private DataInputStream din; 
	        private byte[] buffer; 
	        private int bufferPointer, bytesRead; 
	  
	        public FastReader() 
	        { 
	            din = new DataInputStream(System.in); 
	            buffer = new byte[BUFFER_SIZE]; 
	            bufferPointer = bytesRead = 0; 
	        } 
	  
	        public FastReader(String file_name) throws IOException 
	        { 
	            din = new DataInputStream(new FileInputStream(file_name)); 
	            buffer = new byte[BUFFER_SIZE]; 
	            bufferPointer = bytesRead = 0; 
	        } 
	  
	        public String nextLine() throws IOException 
	        { 
	            byte[] buf = new byte[64]; // line length 
	            int cnt = 0, c; 
	            while ((c = read()) != -1) 
	            { 
	                if (c == '\n') 
	                    break; 
	                buf[cnt++] = (byte) c; 
	            } 
	            return new String(buf, 0, cnt); 
	        } 
	  
	        public int nextInt() throws IOException 
	        { 
	            int ret = 0; 
	            byte c = read(); 
	            while (c <= ' ') 
	                c = read(); 
	            boolean neg = (c == '-'); 
	            if (neg) 
	                c = read(); 
	            do
	            { 
	                ret = ret * 10 + c - '0'; 
	            }  while ((c = read()) >= '0' && c <= '9'); 
	  
	            if (neg) 
	                return -ret; 
	            return ret; 
	        } 
	  
	        public long nextLong() throws IOException 
	        { 
	            long ret = 0; 
	            byte c = read(); 
	            while (c <= ' ') 
	                c = read(); 
	            boolean neg = (c == '-'); 
	            if (neg) 
	                c = read(); 
	            do { 
	                ret = ret * 10 + c - '0'; 
	            } 
	            while ((c = read()) >= '0' && c <= '9'); 
	            if (neg) 
	                return -ret; 
	            return ret; 
	        } 
	  
	        public double nextDouble() throws IOException 
	        { 
	            double ret = 0, div = 1; 
	            byte c = read(); 
	            while (c <= ' ') 
	                c = read(); 
	            boolean neg = (c == '-'); 
	            if (neg) 
	                c = read(); 
	  
	            do { 
	                ret = ret * 10 + c - '0'; 
	            } 
	            while ((c = read()) >= '0' && c <= '9'); 
	  
	            if (c == '.') 
	            { 
	                while ((c = read()) >= '0' && c <= '9') 
	                { 
	                    ret += (c - '0') / (div *= 10); 
	                } 
	            } 
	  
	            if (neg) 
	                return -ret; 
	            return ret; 
	        } 
	  
	        private void fillBuffer() throws IOException 
	        { 
	            bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE); 
	            if (bytesRead == -1) 
	                buffer[0] = -1; 
	        } 
	  
	        private byte read() throws IOException 
	        { 
	            if (bufferPointer == bytesRead) 
	                fillBuffer(); 
	            return buffer[bufferPointer++]; 
	        } 
	  
	        public void close() throws IOException 
	        { 
	            if (din == null) 
	                return; 
	            din.close(); 
	        } 
	    } 
	  
	public static PrintWriter out = new PrintWriter (new BufferedOutputStream(System.out));
	static final long mod = (long)(1e9+7);
	
	//static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) throws IOException {
		FastReader sc = new FastReader();
		// TODO Auto-generated method stub
		int n = sc.nextInt();
		int k = sc.nextInt();
		int[] t = new int[n];
		int[] b = new int[n];
		Pair[] p = new Pair[n];
		for(int i=0;i<n;++i) {
			t[i] = sc.nextInt();
			b[i] = sc.nextInt();
			p[i] = new Pair(t[i],b[i]);
			
		}
		
		Arrays.sort(p);
		TreeMap<Long,Integer>map=new TreeMap<>();
		long sum=0;
		long ans=0;
		long bs=0;
		for(int i=n-1;i>=0;i--){
			if(bs<k){
				add(map,p[i].first);
				sum+=p[i].first;
				ans=Math.max(ans,sum*p[i].second);
				bs++;
			}else if(p[i].first>map.firstKey()){
				long key=map.firstKey();
				if(map.get(key)==1)
					map.pollFirstEntry();
				else
					map.put(key,map.get(key)-1);
				sum-=key;
				add(map,p[i].first);
				sum+=p[i].first;
				ans=Math.max(ans,sum*p[i].second);
			}
		}
		out.println(ans);
			 out.close();
		}

	private static void add(TreeMap<Long, Integer> map, long first) {
		// TODO Auto-generated method stub
		if(map.containsKey(first)) map.put(first, map.get(first)+1);
		else map.put(first, 1);
		
	}
	
		static class Pair implements Comparable<Pair>{
			long first;
			long second;
			Pair(long first,long second){
				this.first = first;
				this.second = second;
			}
			@Override
			public int compareTo(Pair o) {
				return (int) (second-o.second);
			}
			
		}
		
	
	}
	
	
	
	
