#include <bits/stdc++.h>
using namespace std;
const int maxn = 500020;
const int maxx = 10000;
const int MOd = 1e9 + 7;
const int K = 750;
pair<long long, long long> segment[maxn * 3];
int a, b, n;
pair<pair<long long, long long>, int> ar[maxn];
void update(int k, int b, int s, int x, int y, long long m) {
  if (b > y || x > s) return;
  if (x <= b && s <= y) {
    segment[k].first = m;
    return;
  }
  update(2 * k, b, (b + s) / 2, x, y, m);
  update(2 * k + 1, (b + s) / 2 + 1, s, x, y, m);
  segment[k] = min(segment[k + k], segment[k + k + 1]);
}
int main() {
  scanf("%d %d", &a, &b);
  n = 1;
  while (n < b) n <<= 1;
  for (int i = 1; i <= a; i++)
    scanf("%d %d", &ar[i].first.first, &ar[i].first.second), ar[i].second = i;
  sort(ar + 1, ar + 1 + a);
  for (int i = 1; i <= b; i++) segment[i + n - 1].second = i;
  for (int i = b + 1; i <= n; i++) segment[i + n - 1].first = 1e18;
  for (int k = n - 1; k >= 1; k--)
    segment[k] = min(segment[k + k], segment[k + k + 1]);
  long long ans[maxn];
  for (int i = 1; i <= a; i++) {
    pair<long long, long long> t = segment[1];
    ans[ar[i].second] =
        (long long)max(t.first, ar[i].first.first) + ar[i].first.second;
    update(1, 1, n, t.second, t.second,
           max(t.first, ar[i].first.first) + ar[i].first.second);
  }
  for (int i = 1; i <= a; i++) printf("%I64d\n", ans[i]);
  return 0;
}
