#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
int n, m, Q, cnt = 1e6 + 5;
int a[maxn], b[maxn];
struct Seg {
  int maxx, tag;
} seg[maxn << 2];
inline void up(int p) {
  (seg[p].maxx) = max((seg[(p << 1)].maxx), (seg[(p << 1 | 1)].maxx));
}
inline void down(int p) {
  if (!(seg[p].tag)) return;
  (seg[(p << 1)].maxx) += (seg[p].tag),
      (seg[(p << 1 | 1)].maxx) += (seg[p].tag);
  (seg[(p << 1)].tag) += (seg[p].tag), (seg[(p << 1 | 1)].tag) += (seg[p].tag);
  (seg[p].tag) = 0;
}
void add(int p, int l, int r, int ql, int qr, int k) {
  if (l >= ql && r <= qr) {
    (seg[p].maxx) += k;
    (seg[p].tag) += k;
    return;
  }
  down(p);
  int mid = (l + r) >> 1;
  if (ql <= mid) add((p << 1), l, mid, ql, qr, k);
  if (qr > mid) add((p << 1 | 1), mid + 1, r, ql, qr, k);
  up(p);
}
int query(int p, int l, int r) {
  if (l == r) return l;
  down(p);
  int mid = (l + r) >> 1;
  if ((seg[(p << 1 | 1)].maxx) > 0)
    return query((p << 1 | 1), mid + 1, r);
  else
    return query((p << 1), l, mid);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), add(1, 1, cnt, 1, a[i], 1);
  for (int i = 1; i <= m; i++) scanf("%d", &b[i]), add(1, 1, cnt, 1, b[i], -1);
  scanf("%d", &Q);
  while (Q--) {
    int op, x, y;
    scanf("%d%d%d", &op, &x, &y);
    if (op == 1)
      add(1, 1, cnt, 1, a[x], -1), a[x] = y, add(1, 1, cnt, 1, a[x], 1);
    else
      add(1, 1, cnt, 1, b[x], 1), b[x] = y, add(1, 1, cnt, 1, b[x], -1);
    if ((seg[1].maxx) > 0)
      printf("%d\n", query(1, 1, cnt));
    else
      puts("-1");
  }
  return 0;
}
