class SegmentTree(): def __init__(self, n, unit, f, A=None): self.s = 2**(n-1).bit_length() self.size = 2*self.s self.node = [unit]*self.size self.op = f self.UNIT = unit if A: for i in range(n): self.node[self.s+i] = A[i] for i in range(self.s-1, -1, -1): self.node[i] = self.op(self.node[2*i], self.node[2*i+1]) def update(self, i, v): i += self.s self.node[i] = v while i > 0: i >>= 1 self.node[i] = self.op(self.node[2*i], self.node[2*i+1]) def get(self, l, r): vl, vr = self.UNIT, self.UNIT l += self.s r += self.s while l < r: if l & 1: vl = self.op(self.node[l], vl) l += 1 if r & 1: r -= 1 vr = self.op(vr, self.node[r]) l >>= 1 r >>= 1 return self.op(vl, vr) def op(x, y): return y if y[0] >= x[0] else x N, M = map(int, input().split()) A = list(map(int, input().split())) B = [[0]*2 for _ in range(M+1)] for i in range(M): B[i+1] = [A[i], i+1] arr = SegmentTree(M+1, [0, 0], op, B) ans = [] Q = int(input()) for _ in range(Q): t, x, y = map(int, input().split()) if t == 1: v = arr.get(x, x+1)[0] arr.update(x, [v+y, x]) elif t == 2: v = arr.get(x, x+1)[0] arr.update(x, [v-y, x]) else: z = arr.get(0, M+1)[1] ans.append(z) print(*ans, sep='\n')