#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#define inf 0x3f3f3f3f
#define ll long long
using namespace std;
const int maxn = 5e6+5;
int n,m,tree[maxn];
int lowber(int x)
{
return x & -x;
}
void add(int x,int k)
{
while(x<=n)
{
tree[x]+=k;
x += lowber(x);
}
}//讓x點加k單點更改
int sum(int x)
{
int ans= 0;
while(x != 0)
{
ans+=tree[x];
x-=lowber(x);
}
return ans;
}//查詢x的前綴和
int main()
{
scanf("%d%d",&n,&m);
for(register int i = 1;i <= n;++i)
{
int a;
scanf("%d",&a);
add(i,a);//加入樹狀數組要add加
}
int u;
int flag,x,y;
while(m--)
{
scanf("%d%d%d",&flag,&x,&y);
if(flag == 1)
{
add(x,y);
}
else{
printf("%d\n",sum(y)-sum(x-1));//x-y區間的值
}
}
return 0;
}