#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
const int INF = 0x3f3f3f3f;
int n, m;
int a[maxn], b[maxn];
int sum[maxn << 2], maxx[maxn << 2];
void update(int o, int l, int r, int ind, int ans) {
  if (l == r) {
    sum[o] += ans;
    maxx[o] += ans;
    return;
  }
  int mid = (l + r) >> 1;
  if (ind <= mid)
    update(o << 1, l, mid, ind, ans);
  else
    update(o << 1 | 1, mid + 1, r, ind, ans);
  sum[o] = sum[o << 1] + sum[o << 1 | 1];
  maxx[o] = max(maxx[o << 1 | 1], maxx[o << 1] + sum[o << 1 | 1]);
}
struct node {
  int max, sum;
};
int query(int o, int l, int r, node temp) {
  if (l == r) return l;
  int mid = (l + r) >> 1;
  node t;
  t.sum = temp.sum + sum[o << 1 | 1];
  t.max = temp.sum + maxx[o << 1 | 1];
  if (t.max > 0)
    return query(o << 1 | 1, mid + 1, r, temp);
  else
    return query(o << 1, l, mid, t);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  memset(sum, 0, sizeof(sum));
  memset(maxx, 0, sizeof(maxx));
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    update(1, 1, 1e6, a[i], 1);
  }
  for (int i = 1; i <= m; i++) {
    cin >> b[i];
    update(1, 1, 1e6, b[i], -1);
  }
  int q;
  int op, pos, val;
  cin >> q;
  while (q--) {
    cin >> op >> pos >> val;
    if (op == 1) {
      update(1, 1, 1e6, a[pos], -1);
      a[pos] = val;
      update(1, 1, 1e6, val, 1);
    } else {
      update(1, 1, 1e6, b[pos], 1);
      b[pos] = val;
      update(1, 1, 1e6, val, -1);
    }
    if (maxx[1] <= 0)
      puts("-1");
    else
      cout << query(1, 1, 1e6, {0, 0}) << endl;
  }
}
