← Home
```go
package main

import (
	"io"
	"os"
	"sort"
	"strconv"
)

func main() {
	data, _ := io.ReadAll(os.Stdin)
	p := 0
	nextInt := func() int {
		for p < len(data) && (data[p] < '0' || data[p] > '9') {
			p++
		}
		v := 0
		for p < len(data) && data[p] >= '0' && data[p] <= '9' {
			v = v*10 + int(data[p]-'0')
			p++
		}
		return v
	}

	n := nextInt()
	m := nextInt()

	a := make([]int, n)
	b := make([]int, m)
	coords := make([]int, 0, n+m)

	for i := 0; i < n; i++ {
		x := nextInt()
		a[i] = x
		coords = append(coords, x)
	}
	for i := 0; i < m; i++ {
		x := nextInt()
		b[i] = x
		coords = append(coords, x)
	}

	q := nextInt()
	t := make([]int, q)
	id := make([]int, q)
	v := make([]int, q)

	for i := 0; i < q; i++ {
		t[i] = nextInt()
		id[i] = nextInt() - 1
		v[i] = nextInt()
		coords = append(coords, v[i])
	}

	sort.Ints(coords)
	k := 0
	for _, x := range coords {
		if k == 0 || coords[k-1] != x {
			coords[k] = x
			k++
		}
	}
	vals := coords[:k]

	toRev := func(x int) int {
		return k - 1 - sort.SearchInts(vals, x)
	}

	for i := 0; i < n; i++ {
		a[i] = toRev(a[i])
	}
	for i := 0; i < m; i++ {
		b[i] = toRev(b[i])
	}
	for i := 0; i < q; i++ {
		v[i] = toRev(v[i])
	}

	size := 1
	for size < k {
		size <<= 1
	}

	sum := make([]int32, size<<1)
	mx := make([]int32, size<<1)

	for i := 0; i < n; i++ {
		sum[size+a[i]]++
	}
	for i := 0; i < m; i++ {
		sum[size+b[i]]--
	}

	for i := size; i < size+k; i++ {
		mx[i] = sum[i]
	}
	for i := size - 1; i > 0; i-- {
		l := i << 1
		sum[i] = sum[l] + sum[l|1]
		x := sum[l] + mx[l|1]
		if mx[l] > x {
			mx[i] = mx[l]
		} else {
			mx[i] = x
		}
	}

	add := func(pos int, d int32) {
		i := size + pos
		sum[i] += d
		mx[i] = sum[i]
		for i >>= 1; i > 0; i >>= 1 {
			l := i << 1
			sum[i] = sum[l] + sum[l|1]
			x := sum[l] + mx[l|1]
			if mx[l] > x {
				mx[i] = mx[l]
			} else {
				mx[i] = x
			}
		}
	}

	firstPositive := func() int {
		if mx[1] <= 0 {
			return -1
		}
		i := 1
		var acc int32
		for i < size {
			l := i << 1
			if mx[l]+acc > 0 {
				i = l
			} else {
				acc += sum[l]
				i = l | 1
			}
		}
		return i - size
	}

	out := make([]byte, 0, q*8)

	for i := 0; i < q; i++ {
		if t[i] == 1 {
			old := a[id[i]]
			nw := v[i]
			if old != nw {
				add(old, -1)
				add(nw, 1)
				a[id[i]] = nw
			}
		} else {
			old := b[id[i]]
			nw := v[i]
			if old != nw {
				add(old, 1)
				add(nw, -1)
				b[id[i]] = nw
			}
		}

		pos := firstPositive()
		if pos == -1 {
			out = append(out, '-', '1', '\n')
		} else {
			ans := vals[k-1-pos]
			out = strconv.AppendInt(out, int64(ans), 10)
			out = append(out, '\n')
		}
	}

	os.Stdout.Write(out)
}
```