#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <string>
#include <algorithm>
#include <cstring>
#include <map>
#include <memory>
using namespace std;
const int N=100000;
long long n,t,a[N+5],tr[4*N+5];
void pushup(int rt){
tr[rt]=tr[rt<<1]+tr[rt<<1|1];
}
void build(int l,int r,int rt){
if(l==r){
tr[rt]=a[l];
return ;
}
int mid=(l+r)>>1;
build(l,mid,rt<<1);
build(mid+1,r,rt<<1|1);
pushup(rt);
}
void change(int rt,int l,int r,int x,int y,int k){
if(l==x&&r==y){
tr[rt] += k;
return ;
}
int mid=(l+r)>>1;
if(y<=mid)change(rt<<1,l,mid,x,y,k);
else if(x > mid) change(rt<<1|1,mid+1,r,x,y,k);
else {
change(rt<<1,l,mid,x,mid,k);
change(rt<<1|1,mid+1,r,mid+1,y,k);
}
}
int f3(int l,int r,int rt,int L,int R){
if(L<=l&&r<=R){
return tr[rt];
}
int mid=(l+r)>>1;
if(R<=mid)return f3(l,mid,rt<<1,L,R);
else if(L>mid) return f3(mid+1,r,rt<<1|1,L,R);
else return f3(l,mid,rt<<1,L,mid)+f3(mid+1,r,rt<<1|1,mid+1,R);
}
int main(){
scanf("%d%d",&n,&t);
for(int i=1;i<=n;i++)scanf("%d",a+i);
build(1,n,1);
while(t--){
int opt,x,y;
cin>>opt>>x>>y;
if(opt==1){
int k;
cin>>k;
change(1,1,n,x,y,k);
}
if(opt==2)
cout<<f3(1,n,1,x,y)<<endl;
}
return 0;
}