#include <fstream>
using namespace std;
ifstream f("datorii.in");
ofstream g("datorii.out");
int n , m , v[15005] , arbore[100005];
void buildtree(int nod , int left , int right)
{
if(left == right)
{
arbore[nod] = v[left];
return ;
}
int mid = (left + right) / 2;
buildtree(2 * nod , left , mid);
buildtree(2 * nod + 1 , mid + 1 , right);
arbore[nod] = arbore[nod * 2] + arbore[2 * nod + 1];
}
void update(int nod , int left , int right ,int pos , int val)
{
if( left == right)
{
arbore[nod] = v[left];
return ;
}
int mid = (left + right) / 2;
if(pos <= mid)
update( 2 * nod , left , mid , pos , val);
else
update(2 * nod + 1 , mid + 1 , right , pos , val);
arbore[nod] = arbore[2 * nod] + arbore[2 * nod + 1];
}
int querry(int nod , int left , int right , int qleft , int qright)
{
if(left >= qleft && right <= qright)
{
return arbore[nod];
}
int mid = (left + right) / 2;
int s = 0;
if(qleft <= mid && qright > mid)
return querry(2 * nod , left , mid , qleft , qright) + querry(2 * nod + 1 , mid + 1 , right , qleft , qright);
if(qleft <= mid)
return querry(2 * nod , left , mid , qleft , qright);
else
return querry(2 * nod + 1 , mid + 1 , right , qleft , qright);
}
int main()
{
f >> n >> m;
for (int i = 1 ; i <= n ; i++)
{
f >> v[i];
}
buildtree(1 , 1 , n);
for(int i = 1 ; i <= m ; i++)
{
int cer , x , y;
f >> cer >> x >> y;
if(cer == 0)
{
v[x] = v[x] - y;
update(1 , 1 , n , x , y);
}
else
{
g << querry ( 1 , 1 , n , x , y) << '\n';
}
}
}