func_code_string: #include <bits/stdc++.h>   using namespace std;   int a[300000], b[300000];   int tree[1 << 21], lazy[1 << 21];   int prop(int s, int e, int i) {     tree[i] += lazy[i];     if (s != e) lazy[2 * i + 1] += lazy[i], lazy[2 * i + 2] += lazy[i];     lazy[i] = 0;     return 0;   }   int update(int s, int e, int as, int ae, int i, int num) {     prop(s, e, i);     if ((s > ae) || (e < as))       return tree[i];     else if ((s >= as) && (e <= ae)) {       lazy[i] += num;       prop(s, e, i);       return tree[i];     }     int mid = (s + e) / 2;     update(s, mid, as, ae, 2 * i + 1, num),         update(mid + 1, e, as, ae, 2 * i + 2, num);     tree[i] = min(tree[2 * i + 1], tree[2 * i + 2]);     return tree[i];   }   int query(int s, int e, int i) {     prop(s, e, i);     if (s == e) return s;     int mid = (s + e) / 2;     prop(mid + 1, e, 2 * i + 2);     if (tree[2 * i + 2] < 0)       return query(mid + 1, e, 2 * i + 2);     else       return query(s, mid, 2 * i + 1);   }   int main() {     int i;     int n, m, q;     int t, j, x;     scanf( %d %d , &n, &m);     for (i = 0; i < n; i++) scanf( %d , &a[i]);     for (i = 0; i < m; i++) scanf( %d , &b[i]);     for (i = 0; i < n; i++) update(0, 1000000, 1, a[i], 0, -1);     for (i = 0; i < m; i++) update(0, 1000000, 1, b[i], 0, 1);     scanf( %d , &q);     for (i = 0; i < q; i++) {       scanf( %d %d %d , &t, &j, &x), j--;       if (t == 1) {         update(0, 1000000, 1, a[j], 0, 1);         a[j] = x;         update(0, 1000000, 1, a[j], 0, -1);       } else {         update(0, 1000000, 1, b[j], 0, -1);         b[j] = x;         update(0, 1000000, 1, b[j], 0, 1);       }       int ans = query(0, 1000000, 0);       if (ans == 0)         printf( -1 n );       else         printf( %d n , ans);     }     return 0;   }   