#include <bits/stdc++.h>
using namespace std;
int mx[4000010], lazy[4000010];
const int N = 1000000;
void update(int root) {
  mx[root] = max(mx[root << 1], mx[root << 1 | 1]);
  return;
}
void pushdown(int root) {
  mx[root << 1] += lazy[root];
  mx[root << 1 | 1] += lazy[root];
  lazy[root << 1] += lazy[root];
  lazy[root << 1 | 1] += lazy[root];
  lazy[root] = 0;
  return;
}
void add(int root, int l, int r, int x, int y, int ad) {
  if (x <= l && r <= y) {
    mx[root] += ad;
    lazy[root] += ad;
    return;
  }
  int mid = (l + r) >> 1;
  pushdown(root);
  if (x <= mid) add(root << 1, l, mid, x, y, ad);
  if (y > mid) add(root << 1 | 1, mid + 1, r, x, y, ad);
  update(root);
  return;
}
int query(int root, int l, int r) {
  if (l == r) {
    if (mx[root] > 0) return l;
    return -1;
  }
  pushdown(root);
  int mid = (l + r) >> 1;
  if (mx[root << 1 | 1] > 0) return query(root << 1 | 1, mid + 1, r);
  return query(root << 1, l, mid);
}
int a[300010], b[300010];
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    add(1, 1, N, 1, a[i], 1);
  }
  for (int i = 1; i <= m; i++) {
    scanf("%d", &b[i]);
    add(1, 1, N, 1, b[i], -1);
  }
  int q;
  scanf("%d", &q);
  while (q--) {
    int op, x, y;
    scanf("%d %d %d", &op, &x, &y);
    if (op == 1) {
      add(1, 1, N, 1, a[x], -1);
      a[x] = y;
      add(1, 1, N, 1, a[x], 1);
    } else {
      add(1, 1, N, 1, b[x], 1);
      b[x] = y;
      add(1, 1, N, 1, b[x], -1);
    }
    printf("%d\n", query(1, 1, N));
  }
  return 0;
}
