#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 5;
const int M = N;
const int V = 1e6 + 5;
struct lazy_segment_tree {
  struct node {
    long long mx = 0;
    long long lazy = 0;
  };
  vector<node> st;
  int n;
  node unite(node a, node b) {
    node tmp;
    tmp.mx = max(a.mx, b.mx);
    return tmp;
  }
  void refresh(int u, int l, int r) {
    if (st[u].lazy != 0) {
      st[u].mx += st[u].lazy;
      if (l != r) {
        st[(u + 1)].lazy += st[u].lazy;
        st[(u + (((l + r) / 2 - l + 1) << 1))].lazy += st[u].lazy;
      }
      st[u].lazy = 0;
    }
  }
  lazy_segment_tree(int _n = 0) {
    n = _n;
    st.resize(2 * n);
  }
  void update(int u, int l, int r, int ll, int rr, long long v) {
    refresh(u, l, r);
    if (rr < l || r < ll || r < l) {
      return;
    }
    if (ll <= l && r <= rr) {
      st[u].lazy += v;
      refresh(u, l, r);
      return;
    }
    update((u + 1), l, (l + r) / 2, ll, rr, v);
    update((u + (((l + r) / 2 - l + 1) << 1)), (l + r) / 2 + 1, r, ll, rr, v);
    st[u] = unite(st[(u + 1)], st[(u + (((l + r) / 2 - l + 1) << 1))]);
  }
  void update(int l, int r, long long v) { update(0, 0, n - 1, l, r, v); }
  int qmax(int u, int l, int r) {
    refresh(u, l, r);
    if (st[u].mx <= 0) {
      return -1;
    }
    if (l == r) {
      return l;
    }
    refresh((u + 1), l, (l + r) / 2);
    refresh((u + (((l + r) / 2 - l + 1) << 1)), (l + r) / 2 + 1, r);
    if (st[(u + (((l + r) / 2 - l + 1) << 1))].mx > 0) {
      return qmax((u + (((l + r) / 2 - l + 1) << 1)), (l + r) / 2 + 1, r);
    }
    return qmax((u + 1), l, (l + r) / 2);
  }
  int qmax() { return qmax(0, 0, n - 1); }
};
int dish[N], pupil[M];
lazy_segment_tree st(V);
int n, m, q;
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0), cout.precision(15);
  cin >> n >> m;
  for (int i = (1); i <= ((n)); i += (+1)) {
    cin >> dish[i];
    st.update(0, dish[i], +1);
  }
  for (int i = (1); i <= ((m)); i += (+1)) {
    cin >> pupil[i];
    st.update(0, pupil[i], -1);
  }
  cin >> q;
  int to_do, i, x;
  while (q--) {
    cin >> to_do >> i >> x;
    if (to_do == 1) {
      st.update(0, dish[i], -1);
      dish[i] = x;
      st.update(0, dish[i], +1);
    } else {
      st.update(0, pupil[i], +1);
      pupil[i] = x;
      st.update(0, pupil[i], -1);
    }
    cout << st.qmax() << '\n';
  }
  return 0;
}
