import sys N, Q = map(int, sys.stdin.readline().split()) (*A,) = [(int(a) << 17) + i for i, a in enumerate(sys.stdin.readline().split())] rN = int((N**0.5) + 0.5) rQ = int((Q**0.5) + 0.5) queries = [[] for _ in range((Q + rQ - 1) // rQ)] for q in range(Q): t, *query = map(int, sys.stdin.readline().split()) assert t == 1 or t == 2 if t == 1: x, y = query x -= 1 queries[q // rQ].append(((t << 17) + x << 17) + y << 17 * 2) else: l, r, a, b = query l -= 1 queries[q // rQ].append(((((t << 17) + l << 17) + r << 17) + a << 17) + b) answer = [] for block in queries: ans = [0] * len(block) B = A[:] B.sort() events = [1 << 69] * (Q * 2) e = 0 for q in range(len(block)): t = block[q] b = t & (1 << 17) - 1 t >>= 17 a = t & (1 << 17) - 1 t >>= 17 r = t & (1 << 17) - 1 t >>= 17 l = t & (1 << 17) - 1 t >>= 17 if t == 1: continue events[e] = ((((a << 17) + l << 17) + r << 17) + q << 1) + 0 events[e + 1] = ((((b << 17) + l << 17) + r << 17) + q << 1) + 1 e += 2 events.sort() j = 0 sum0, sum1 = [0] * N, [0] * N bsum0, bsum1 = [0] * ((N + rN - 1) // rN), [0] * ((N + rN - 1) // rN) for e in range(len(events)): if events[e] == (1 << 69): break x = events[e] t = x & 1 x >>= 1 q = x & (1 << 17) - 1 x >>= 17 r = x & (1 << 17) - 1 x >>= 17 l = x & (1 << 17) - 1 x >>= 17 while j < N and (B[j] >> 17) < x: a, i = B[j] >> 17, B[j] & (1 << 17) - 1 sum0[i] += 1 sum1[i] += a bsum0[i // rN] += 1 bsum1[i // rN] += a j += 1 s0, s1 = 0, 0 bl, br = (l + rN - 1) // rN, r // rN if bl > br: s0 += sum(sum0[l:r]) s1 += sum(sum1[l:r]) else: s0 += sum(bsum0[bl:br]) s0 += sum(sum0[l : bl * rN]) s0 += sum(sum0[br * rN : r]) s1 += sum(bsum1[bl:br]) s1 += sum(sum1[l : bl * rN]) s1 += sum(sum1[br * rN : r]) if t == 0: ans[q] -= s1 ans[q] += s0 * x else: ans[q] += s1 ans[q] += (r - l - s0) * x update_history = {} for q in range(len(block)): t = block[q] b = t & (1 << 17) - 1 t >>= 17 a = t & (1 << 17) - 1 t >>= 17 r = t & (1 << 17) - 1 t >>= 17 l = t & (1 << 17) - 1 t >>= 17 if t == 1: update_history[l] = r elif a > b: answer.append(a * (r - l)) continue else: for i, x in update_history.items(): if l <= i < r: ans[q] -= max(a, min(b, A[i] >> 17)) ans[q] += max(a, min(b, x)) answer.append(ans[q]) for i, x in update_history.items(): A[i] = (x << 17) + i sys.stdout.write("\n".join(map(str, answer))) sys.stdout.write("\n")