#include <bits/stdc++.h>
using namespace std;
const int pot = 1048576;
struct tournament {
  int sz;
  vector<pair<int, int> > l;
  tournament(int _sz) {
    sz = _sz;
    for (int i = 0; i < sz; i++) {
      l.push_back(make_pair(0, 0));
    }
  }
  void update(int pos, int val) {
    l[pos].first += val;
    l[pos].second += val;
    for (pos /= 2; pos > 0; pos /= 2) {
      l[pos].first += val;
      l[pos].second =
          max(l[pos * 2].second + l[pos * 2 + 1].first, l[pos * 2 + 1].second);
    }
  }
  int query(int L, int D, int x, int val) {
    if (x >= pot) {
      if (x - pot == 0) {
        return pot - 1;
      }
      if (l[x].second > val) {
        return x;
      }
      return pot - 1;
    }
    if (l[x * 2 + 1].second > val) {
      return query((L + D) / 2 + 1, D, x * 2 + 1, val);
    } else {
      return query(L, (L + D) / 2, x * 2, val - l[x * 2 + 1].first);
    }
  }
};
vector<int> l1, l2;
tournament T(pot * 2);
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  int a;
  for (int i = 0; i < n; i++) {
    scanf("%d", &a);
    l1.push_back(a);
    T.update(a + pot, 1);
  }
  for (int i = 0; i < m; i++) {
    scanf("%d", &a);
    l2.push_back(a);
    T.update(a + pot, -1);
  }
  int q;
  scanf("%d", &q);
  int b, c;
  for (int i = 0; i < q; i++) {
    scanf("%d%d%d", &a, &b, &c);
    b--;
    if (a == 1) {
      T.update(l1[b] + pot, -1);
      T.update(c + pot, 1);
      printf("%d\n", T.query(1, pot, 1, 0) - pot);
      l1[b] = c;
    } else {
      T.update(l2[b] + pot, 1);
      T.update(c + pot, -1);
      printf("%d\n", T.query(1, pot, 1, 0) - pot);
      l2[b] = c;
    }
  }
  return 0;
}
