#include <bits/stdc++.h>
using namespace std;
long long tree[4 * 1000002], lazy[4 * 1000002];
void push(long long n) {
  tree[2 * n] += lazy[n];
  lazy[2 * n] += lazy[n];
  tree[2 * n + 1] += lazy[n];
  lazy[2 * n + 1] += lazy[n];
  lazy[n] = 0;
}
void update(long long n, long long st, long long end, long long l, long long r,
            long long val) {
  if (l > end || r < st) {
    return;
  } else if (l <= st && end <= r) {
    tree[n] += val;
    lazy[n] += val;
  } else {
    long long mid = (st + end) / 2;
    push(n);
    update(2 * n, st, mid, l, r, val);
    update(2 * n + 1, mid + 1, end, l, r, val);
    tree[n] = min(tree[2 * n], tree[2 * n + 1]);
  }
}
long long query(long long n, long long st, long long end) {
  if (tree[n] >= 0)
    return -1;
  else if (st == end) {
    return st;
  } else {
    long long mid = (st + end) / 2;
    push(n);
    if (tree[2 * n + 1] < 0)
      return query(2 * n + 1, mid + 1, end);
    else
      return query(2 * n, st, mid);
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n, m;
  cin >> n >> m;
  long long a[n + 1], b[m + 1];
  for (long long i = 0; i < n; i++) {
    cin >> a[i + 1];
    update(1, 1, 1000002, 1, a[i + 1], -1);
  }
  for (long long i = 0; i < m; i++) {
    cin >> b[i + 1];
    update(1, 1, 1000002, 1, b[i + 1], 1);
  }
  long long q;
  cin >> q;
  while (q--) {
    long long tmp, p, q;
    cin >> tmp >> p >> q;
    if (tmp == 1) {
      update(1, 1, 1000002, 1, a[p], 1);
      a[p] = q;
      update(1, 1, 1000002, 1, a[p], -1);
    } else {
      update(1, 1, 1000002, 1, b[p], -1);
      b[p] = q;
      update(1, 1, 1000002, 1, b[p], 1);
    }
    cout << query(1, 1, 1000002) << "\n";
  }
}
