rt。
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define rrep(i,x,y) for(int i=x;i>=y;i--)
#define sc scanf
#define pr printf
inline int read(){int s=0,w=1;char c=getchar();while(!isdigit(c)){if(c=='-') w=-1;c=getchar();}while(isdigit(c)){s=(s<<1)+(s<<3)+(c^48);c=getchar();}return s*w;}
const int N=5e5+10;
struct Tree{
int l,r,sum;
};
Tree tr[N << 2];
int a[N];
inline void pushup(int u){
tr[u].sum=tr[u << 1].sum + tr[u << 1 | 1].sum;
}
inline void build(int u,int l,int r){
tr[u]={l,r};
if(l==r){
tr[u].sum=a[l];
return;
}
int mid=((l + r) >> 1);
build ( u << 1 , l , mid);
build ( u << 1 | 1 , mid + 1 , r);
pushup(u);
}
inline void update(int u , int id , int d){
int l = tr[u].l , r = tr[u].r ;
if(l == r && l == id){
tr[u].sum += d;
return;
}
int mid = ((l + r) >> 1);
if(id <= mid) update(u << 1 , id , d);
else update(u << 1 | 1 , id , d);
pushup(u);
}
inline int query(int u , int L , int R){
int l=tr[u].l , r = tr[u].r , mid = ((l + r) >> 1);
if(l >= L && r <= R) return tr[u].sum;
int val = 0;
if(L <= mid) val += query(u << 1 , L , R);
if(mid < r) val += query(u << 1 | 1 , L , R);
return val;
}
signed main(){
int n,Q,opt,x,y;
n=read();Q=read();
rep(i,1,n) a[i]=read();
build(1,1,n);
while(Q--){
opt=read();x=read();y=read();
if(opt == 1) update (1 , x , y);
else pr("%lld\n" , query (1 , x , y));
}
return 0;
}