// Arup Guha
// Codeforces 523-D
// 6/23/2015 - written for SI@UCF taped lecture on data structures.

import java.util.*;
import java.io.*;

public class stats {

	public static void main(String[] args) throws Exception {
		
		BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer tok = new StringTokenizer(stdin.readLine());
		int numItems = Integer.parseInt(tok.nextToken());
		int numServers = Integer.parseInt(tok.nextToken());
		
		// We start iwth numServers servers, ready to go.
		PriorityQueue<Long> pq = new PriorityQueue<Long>();
		for (int i=0; i<numServers; i++)
			pq.offer(0L);
		
		// So we don't waste time on many prints.
		StringBuilder str = new StringBuilder();
		
		// Go through each item
		for (int i=0; i<numItems; i++) {
			
			// Get request.
			tok = new StringTokenizer(stdin.readLine());
			int start = Integer.parseInt(tok.nextToken());
			int len = Integer.parseInt(tok.nextToken());
			
			// We start when the item is there and a server is ready.
			long next = pq.poll();
			long ready = Math.max(start, next) + len;
			str = str.append(ready+"\n");
			
			// Put this server back into the queue at the appropriate time.
			pq.offer(ready);
		}
		
		System.out.println(str);
	}
}
