import sys import random random.seed(42) class Node: __slots__ = ['value', 'sum', 'size', 'left', 'right', 'priority'] def __init__(self, value): self.value = value self.sum = value self.size = 1 self.left = None self.right = None self.priority = random.randint(0, 1 << 31) def get_size(node): return node.size if node else 0 def get_sum(node): return node.sum if node else 0 def update(node): if node: node.size = 1 + get_size(node.left) + get_size(node.right) node.sum = node.value + get_sum(node.left) + get_sum(node.right) def split(node, key): if node is None: return (None, None) current_key = get_size(node.left) if current_key >= key: left, right = split(node.left, key) node.left = right update(node) return (left, node) else: left, right = split(node.right, key - current_key - 1) node.right = left update(node) return (node, right) def merge(left, right): if not left: return right if not right: return left if left.priority > right.priority: left.right = merge(left.right, right) update(left) return left else: right.left = merge(left, right.left) update(right) return right def main(): input = sys.stdin.read().split() ptr = 0 N, Q = int(input[ptr]), int(input[ptr+1]) ptr +=2 A = list(map(int, input[ptr:ptr+N])) ptr +=N root = None for num in A: root = merge(root, Node(num)) for _ in range(Q): T = int(input[ptr]) l = int(input[ptr+1]) r = int(input[ptr+2]) ptr +=3 if T == 1: l -=1 r -=1 left, temp = split(root, l) mid, right_tree = split(temp, r - l +1) sum_mid = get_sum(mid) new_node = Node(sum_mid) root = merge(left, merge(new_node, right_tree)) else: l -=1 r -=1 left, temp = split(root, l) mid, right_tree = split(temp, r - l +1) print(mid.sum if mid else 0) root = merge(left, merge(mid, right_tree)) if __name__ == "__main__": main()