#include<bits/stdc++.h>
#define int long long
const int N=200005;
int n,f,l,r,x,tree[2][N];
int read(){
int x=0,f=1;char ch;
while((ch=getchar())<48||ch>57)if(ch==45)f=0;
while(ch>=48&&ch<=57)x=(x<<3ll)+(x<<1ll)+(ch^48),ch=getchar();
return f?x:-x;
}
void write(int x){
if(x<0)putchar(45),write(-x);
else{if(x>9)write(x/10);putchar(x%10^48);}
}
void writeln(int x){write(x),puts("");}
void upd(int x,int val){
for(int i=x;i<=n;i+=i&-i)tree[0][i]+=x*val;
for(;x<=n;x+=x&-x)tree[1][x]+=val;
}
int ask(int x,int ret=0){for(int i=x;i;i-=i&-i)ret+=(x+1)*tree[1][i]-tree[0][i];return ret;}
int query(int r,int l){return ask(r)-ask(l-1);}
signed main(){
n=read(),f=read();
for(int i=1;i<=n;++i)upd(i,x=read()-x);
while(f--)switch(read()){
case 1:l=read(),r=read(),x=read(),upd(l,x),upd(r+1,-x);break;
case 2:upd(1,x=read());upd(2,-x);break;
case 3:upd(1,-(x=read()));upd(2,x);break;
case 4:writeln(query(read(),read()));break;
case 5:writeln(query(1,1));break;}
}