#include<fstream>
std::ifstream fin("datorii.in");
std::ofstream fout("datorii.out");
int n, m;
long long arbint[60001];
void update(int val, int index, int st, int dr, int pos)
{
if(st==dr)
{
arbint[pos]+=val;
return;
}
int mij=(st+dr)/2;
if(index>mij)
update(val, index, mij+1, dr, 2*pos+1);
else
update(val, index, st, mij, 2*pos);
arbint[pos]=arbint[2*pos]+arbint[2*pos+1];
}
bool commonPart(int st, int dr, int start, int stop)
{
if(st>=start && st<=stop)
return true;
if(dr>=start && dr<=stop)
return true;
if(start>=st && start<=dr)
return true;
if(stop>=st && stop<=dr)
return true;
return false;
}
void query(int start, int stop, int st, int dr, int pos, long long &sum)
{
if(st>=start && dr<=stop)
{
sum+=arbint[pos];
return;
}
int mij=(st+dr)/2;
if(commonPart(st, mij, start, stop))
query(start, stop, st, mij, 2*pos, sum);
if(commonPart(mij+1, dr, start, stop))
query(start, stop, mij+1, dr, 2*pos+1, sum);
}
void solve()
{
fin>>n>>m;
for(int index=1; index<=n; ++index)
{
int val;
fin>>val;
update(val, index, 1, n, 1);
}
for(int index=0; index<m; ++index)
{
int q;
fin>>q;
if(q)
{
int a, b;
fin>>a>>b;
long long sum=0;
query(a, b, 1, n, 1, sum);
fout<<sum<<'\n';
}
else
{
int i, val;
fin>>i>>val;
update(-val, i, 1, n, 1);
}
}
}
int main()
{
solve();
fin.close();
fout.close();
return 0;
}