#include <stdio.h>
#include <math.h>
#include <stdlib.h>
long long v[33001];
inline long long query(long long nod,long long s,long long d,long long l,long long r)
{
if ((d<l)||(s>r)) return 0;
if ((l<=s)&&(d<=r)) return v[nod];
int a,b;
a=query(2*nod,s,(s+d)/2,l,r);
b=query(2*nod+1,(s+d)/2+1,d,l,r);
return a+b;
}
int main()
{
long long i=1,j,x=2,n,m,a,b,c;
freopen("datorii.in","r",stdin);
freopen("datorii.out","w",stdout);
scanf("%lld%lld",&n,&m);
do
{
x*=2;
}
while (n>x);
for (i=x;i<x+n;i++) scanf("%lld",&v[i]);
for (i=x-1;i>0;i--) v[i]=v[2*i]+v[2*i+1];
for (i=1;i<m+1;i++)
{
scanf("%lld%lld%lld",&a,&b,&c);
if (a==0) for (j=x+b-1;j>0;j=j/2) v[j]-=c;
else printf("%lld\n",query(1,1,x,b,c));
}
return 0;
}