#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int ans[N];
set<int> avail;
void dnc(vector<tuple<int, int, int>>& events, int l, int r, int maxi = -1) {
  vector<int> removed;
  for (auto& it : events) {
    int s, e, pos;
    tie(s, e, pos) = it;
    if (s <= l && r <= e) {
      auto res = avail.lower_bound(pos);
      removed.push_back(*res);
      maxi = max(maxi, *res);
      avail.erase(res);
    }
  }
  if (r - l < 2) {
    ans[l] = maxi;
  } else {
    vector<tuple<int, int, int>> lef, rig;
    int mid = (l + r) >> 1;
    for (auto& it : events) {
      int s, e, pos;
      tie(s, e, pos) = it;
      if (s <= l && r <= e) continue;
      if (s < mid) lef.push_back(it);
      if (e > mid) rig.push_back(it);
    }
    dnc(lef, l, mid, maxi);
    dnc(rig, mid, r, maxi);
  }
  for (int x : removed) {
    avail.insert(x);
  }
}
int main() {
  int n, k, m;
  scanf("%d %d %d", &n, &k, &m);
  map<pair<int, int>, int> occur;
  vector<tuple<int, int, int>> events;
  for (int i = 0; i < m; ++i) {
    int x, y;
    scanf("%d %d", &x, &y);
    auto now = make_pair(x, y);
    auto it = occur.find(now);
    if (it == occur.end()) {
      occur[now] = i;
    } else {
      int s = y + abs(x - k);
      events.emplace_back(it->second, i, s);
      occur.erase(it);
    }
  }
  for (auto& it : occur) {
    int s = it.first.second + abs(it.first.first - k);
    events.emplace_back(it.second, m, s);
  }
  for (int i = 1; i <= 2 * n + m; ++i) avail.insert(i);
  dnc(events, 0, m);
  for (int i = 0; i < m; ++i) {
    ans[i] = max(0, ans[i] - n);
    printf("%d\n", ans[i]);
  }
  return 0;
}
