#include<bits/stdc++.h>
#define maxn 10005
using namespace std;
const int mod=1e9+7;
inline int read()
{
register int x=0,f=0;register char ch=getchar();
while(ch<'0'||ch>'9')f|=ch=='-',ch=getchar();
while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return f?-x:x;
}
int sum[maxn<<2];
int a[maxn];
void pushup(const int u)//求和
{
sum[u]=sum[u*2]+sum[u*2+1];
}
void build(const int now,int l,int r)//建树
{
if(l==r)
{
sum[now]=a[l];
return ;
}
int mid=l+r>>1;
build(now*2,l,mid);
build(now*2+1,mid+1,r);
pushup(now);
}
/*单点修改*/void ChangeOnePoint(int now,int l,int r,int p,int x)
{
if(l==r)
{
sum[now]=sum[now]+x;
}
else
{
int mid=l+r>>1;
if(mid>=p)
{
ChangeOnePoint(now*2,l,mid,p,x);
}
else ChangeOnePoint(now*2+1,mid+1,r,p,x);
pushup(now);
}
}
/*判断是否包含*/bool InRange(int L,int R,int l,int r)
{
return (L<=l)&&(r<=R);
}
/*判断完全无交*/bool OutRange(int L,int R,int l,int r)
{
return (L>r) || (R<l);
}
/*区间查询*/int SearchForRange(int now,int L,int R,int l,int r)
{
if(InRange(L,R,l,r)==1)
{
return sum[now];
}
else if(OutRange(L,R,l,r)==0)
{
int mid=L+R>>1;
return SearchForRange(now*2,L,mid,l,r)+SearchForRange(now*2+1,mid+1,R,l,r);
}
else return 0;
}
int main()
{
int n=read(),m=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
}
build(1,1,n);
for(int i=1;i<=m;i++)
{
int op=read();
int x=read(),y=read();
if(op==1)
{
ChangeOnePoint(1,1,n,x,y);
}
else
{
cout<<SearchForRange(1,1,n,x,y)<<endl;
}
}
return 0;
}