#include<iostream>
using namespace std;
void qwq(int abc[],int size,int x,int y,int k){
for(int z=x;z<=y;z++)
abc[z]+=k;
}
int qwq(int abc[],int size,int x,int y){
int ans=0;
for(int z=x;z<=y;z++)
ans+=abc[z];
return ans;
}
struct ope_par{
int type,x,y,k=0;
};
int main(){
int n,m;
cin>>n>>m;
int a[n+1]={0},out[m+1]={0},b=0;
ope_par ope[m+1];
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=m;i++){
cin>>ope[i].type;
if(ope[i].type==1){
cin>>ope[i].x>>ope[i].y>>ope[i].k;
qwq(a,sizeof(a),ope[i].x,ope[i].y,ope[i].k);
}
if(ope[i].type==2){
cin>>ope[i].x>>ope[i].y;
out[++b]=qwq(a,sizeof(a),ope[i].x,ope[i].y);
}
}
for(int i=1;i<=b;i++)
cout<<out[i]<<endl;
return 0;
}