#define _CRT_SECURE_NO_WARNINGS #define _SILENCE_CXX17_C_HEADER_DEPRECATION_WARNING #include using namespace std; #define CRP(t, x) const t &x #define OPL(t, x) bool operator<(CRP(t, x)) const #define FIL(x, v) memset(x, v, sizeof(x)) #define CLR(x) FIL(x, 0) #define NE1(x) FIL(x, -1) #define INF(x) FIL(x, 0x3f) #ifndef _DEBUG #define _DEBUG 0 #endif // !_DEBUG #define IFD if (_DEBUG) typedef long long ll, i64; const int N = 1e5 + 50; ll A[N], B[N]; inline ll lowbit(ll x) { return x & -x; } template void update(ll p, ll v) { for (; p < N; p += lowbit(p)) arr[p] += v; } template ll query(ll p) { ll ans = 0; for (; p; p -= lowbit(p)) ans += arr[p]; return ans; } int main() { int n, m; scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { begin(A); ll tmp; scanf("%lld", &tmp); update(i, tmp); update(i, tmp * (N - i + 1)); } for (int i = 1; i <= m; i++) { ll op, x, y; scanf("%lld%lld%lld", &op, &x, &y); if (op == 1) { ll ans1 = query(y) - query(x - 1); ll ans2 = query(y) - query(x - 1); printf("%lld\n", ans1 - ans2 * (N - y)); } else { ll dif = query(x) - query(x - 1); update(x, y - dif); update(x, (y - dif) * (N - x + 1)); } } return 0; }