#include <bits/stdc++.h>
using namespace std;
struct node {
  int l, r;
  int mx, laz;
};
const int MAXN = 1e6 + 10;
int n, m, q, a[MAXN], b[MAXN];
node vs[MAXN * 4];
void upd(int v) {
  vs[v].mx = 0;
  if (2 * v + 1 < MAXN * 4) vs[v].mx = max(vs[2 * v].mx, vs[2 * v + 1].mx);
  vs[v].mx += vs[v].laz;
}
void make(int v, int l, int r) {
  vs[v].l = l, vs[v].r = r;
  if (r - l == 1) return;
  int mid = (l + r) / 2;
  make(2 * v, l, mid);
  make(2 * v + 1, mid, r);
}
void add(int v, int ql, int qr, int val) {
  if (qr <= vs[v].l || vs[v].r <= ql) return;
  if (ql <= vs[v].l && vs[v].r <= qr) {
    vs[v].laz += val;
    upd(v);
    return;
  }
  add(2 * v, ql, qr, val);
  add(2 * v + 1, ql, qr, val);
  upd(v);
}
int getr(int v, int del) {
  int l = 2 * v, r = 2 * v + 1;
  if (vs[v].r - vs[v].l == 1) {
    if (del + vs[v].laz > 0) return vs[v].l;
    return -1;
  }
  if (vs[r].mx + vs[v].laz + del > 0) return getr(r, vs[v].laz + del);
  return getr(l, vs[v].laz + del);
}
int main() {
  make(1, 0, MAXN);
  cin >> n >> m;
  for (int i = 0; i < n; i++) cin >> a[i], add(1, 0, a[i] + 1, 1);
  for (int i = 0; i < m; i++) cin >> b[i], add(1, 0, b[i] + 1, -1);
  cin >> q;
  for (int i = 0; i < q; i++) {
    int t, xa, x;
    cin >> t >> xa >> x;
    xa--;
    if (t == 1) {
      add(1, 0, a[xa] + 1, -1);
      add(1, 0, x + 1, 1);
      a[xa] = x;
    } else {
      add(1, 0, b[xa] + 1, 1);
      add(1, 0, x + 1, -1);
      b[xa] = x;
    }
    cout << getr(1, 0) << '\n';
  }
}
