#include<bits/stdc++.h>
using namespace std;
using ll=long long;
//线段树
struct D {
int l;
int r;
ll sum;
};
int main() {
int n, q;
cin >> n >> q;
vector<int>arr(n+1);
for(int i=1;i<=n;i++){
cin>>arr[i];
}
vector<D>tree(5*n+1);
function<void(int, int, int)> buildTree = [&](int i, int l, int r) {
tree[i].l=l,tree[i].r=r;
if (l == r) {
tree[i].sum = arr[l];
return;
}
int mid=l+(r-l)/2;
buildTree(2*i,l,mid);
buildTree(2*i+1,mid+1,r);
tree[i].sum=tree[i*2].sum+tree[i*2+1].sum;
};
function<void(int ,int,int)> change=[&](int i,int idx,int num){
if(tree[i].l==tree[i].r){
tree[i].sum+=num;
return ;
}
if(tree[i*2].r>=idx){
change(i*2,idx,num);
}else{
change(i*2+1,idx,num);
}
tree[i].sum=tree[i*2].sum+tree[i*2+1].sum;
};
function<ll(int ,int,int)> search=[&](int i,int l,int r){
if(tree[i].l>=l&&tree[i].r<=r){
return tree[i].sum;
}
ll s=0;
if(tree[2*i].r>=l){
s+=search(2*i,l,r);
}
if(tree[2*i+1].l<=r){
s+=search(2*i+1,l,r);
}
return s;
};
buildTree(1,1,n);
int flag,a,b;
while(q--){
cin>>flag>>a>>b;
if(flag==1){
change(1,a,b);
}
else{
cout<<search(1,a,b)<<endl;
}
}
}