#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
struct Node{
long long sum;
int l,r;
}s[1010];
int a[N],o,le,ri,pos[N],n,q;
int main(){
scanf("%d%d",&n,&q);
int x=ceil(sqrt(n));//每块个数
int t=ceil(n*1.0/x);//分块个数
for(int i=1;i<=t-1;i++){
s[i].l=(i-1)*x+1;
s[i].r=i*x;
}
s[t].l=(t-1)*x+1;
s[t].r=n;
for(int i=1;i<=n;i++) {
scanf("%d",&a[i]);
s[i/x+1].sum+=a[i];
pos[i]=i/x+1;
}
while(q--){
scanf("%d%d%d",&o,&le,&ri);
if(o==2){
long long res=0;
if(pos[ri]-pos[le]<=1){
for(int i=le;i<=ri;i++) res+=a[i];
}
else{
for(int i=le;i<=s[pos[le]].r;i++) res+=a[i];
for(int i=pos[le]+1;i<=pos[ri]-1;i++) res+=s[i].sum;
for(int i=s[pos[ri]].r;i<=ri;i++) res+=a[i];
}
printf("%lld\n",res);
}
else{
a[le]+=ri;
s[pos[le]].sum+=ri;
}
}
return 0;
}