#include <bits/stdc++.h>
using namespace std;
const int INF = (int)1e9 + 10;
const int N = (int)1e6 + 10;
const long double eps = 1e-7;
mt19937 rnd(228);
struct tree {
  int l, r, mx, push;
};
tree t[4 * N];
void build(int v, int l, int r) {
  t[v].l = l;
  t[v].r = r;
  t[v].mx = 0;
  t[v].push = 0;
  if (l == r) return;
  build(v + v, l, (l + r) / 2);
  build(v + v + 1, (l + r) / 2 + 1, r);
}
void push(int v) {
  int& p = t[v].push;
  t[v + v].mx += p;
  t[v + v + 1].mx += p;
  t[v + v].push += p;
  t[v + v + 1].push += p;
  p = 0;
}
void add(int v, int id, int val) {
  if (id < t[v].l) return;
  if (id >= t[v].r) {
    t[v].mx += val;
    t[v].push += val;
    return;
  }
  push(v);
  add(v + v, id, val);
  add(v + v + 1, id, val);
  t[v].mx = max(t[v + v].mx, t[v + v + 1].mx);
}
int get_ans(int v) {
  if (t[v].mx <= 0) return -1;
  if (t[v].l == t[v].r) return t[v].l;
  push(v);
  int to = get_ans(v + v + 1);
  if (to == -1) return get_ans(v + v);
  return to;
}
void query1(int x, int y) {
  if (x) add(1, x, -1);
  add(1, y, 1);
}
void query2(int x, int y) {
  if (x) add(1, x, 1);
  add(1, y, -1);
}
int main() {
  ios_base::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  vector<int> a(n + 1), b(m + 1);
  build(1, 0, N - 1);
  add(1, 0, -INF);
  for (int i = 1; i <= n; ++i) {
    cin >> a[i];
    query1(0, a[i]);
  }
  for (int j = 1; j <= m; ++j) {
    cin >> b[j];
    query2(0, b[j]);
  }
  int q;
  cin >> q;
  while (q--) {
    int t, id, x;
    cin >> t >> id >> x;
    if (t == 1) {
      query1(a[id], x);
      a[id] = x;
    } else {
      query2(b[id], x);
      b[id] = x;
    }
    int ans = get_ans(1);
    cout << ans << '\n';
  }
}
