#include<bits/stdc++.h>
#define lowbit(x) x&(-x)
#define M(a,b) memset(a,b,sizeof(a))
#define maxn 200001
#define inf 0x7fffffff
using namespace std;
inline long long read(){
char c=getchar();long long num=0;bool b=0;
for(;c<'0'||c>'9';b=(c=='-'?1:0),c=getchar());
for(;c>='0'&&c<='9';num=(num<<3)+(num<<1)+(c^'0'),c=getchar());
return b?-num:num;
}
long long n,m,x;
long long c[maxn];
inline void add(long long i,long long x){
for(long long j=i;j<=maxn;j+=lowbit(j)) c[j]+=x;
return;
}
long long sum(long long x){
long long ans=0;
while(x){
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
int main(){
n=read();
m=read();
for(long long i=1;i<=n;i++){
x=read();
add(i,x);
}
for(long long i=1;i<=m;i++){
x=read();
switch(x){
case 1:
long long s,e,k;
s=read();
e=read();
k=read();
for(long long j=s;j<=e;j++) add(j,k);
break;
case 2:
long long kk;
kk=read();
add(1,kk);
break;
case 3:
long long kkk;
kkk=read();
add(1,-kkk);
break;
case 4:
long long ss,ee;
ss=read();
ee=read();
printf("%lld\n",sum(ee)-sum(ss-1));
break;
case 5:
printf("%lld\n",sum(1));
break;
}
}
return 0;
}