#include <iostream>
#include <fstream>
using namespace std;
int aib[100005];
int v[100005];
int lsb(int a)
{
return (a&-a);
}
int n;
void update (int poz, int val)
{
for (int i=poz; i<=n; i+=lsb(i))
{
aib[i]+=val;
}
return;
}
int query(int p1)
{
int sum=0;
for (int i=p1; i>0; i-=lsb(i))
{
sum+=aib[i];
}
return sum;
}
int main()
{
ifstream cin ("datorii.in");
ofstream cout ("datorii.out");
///ok deci structura aibului
///fiecare pozitie tine minte combinatia celor lsb pozitii dinaintea sa
///apoi cand suntem interogati de un in interval, ii tot
///luam in mod repetat lsb-ul
///cand dam update la o pozitie, tot crestem cu lsb-ul pozitiei curente
int q, cer, a, b;
cin>>n>>q;
for (int i=1; i<=n; i++)
{
cin>>a;
update(i, a);
}
/*for (int i=1; i<=n; i++)
{
cout<<aib[i]<<" ";
}*/
for (int i=0; i<q; i++)
{
cin>>cer>>a>>b;
if (cer==0)
{
update(a, -b);
}
else
{
cout<<query(b)-query(a-1)<<'\n';
}
}
}