#include <cstdio>
#define SIZE 15005
using namespace std;
int n, m, int_tree[ 2 * SIZE], v[SIZE];
int index, value, start, finish, sum;
inline void update(int, int, int);
inline void query(int, int, int);
int main()
{
freopen("datorii.in", "r", stdin);
freopen("datorii.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i=1; i<=n; ++i)
{
scanf("%d", &value);
v[i] = value;
index = i;
update(1, 1, n);
}
while( m-- )
{
int op, a, b;
scanf("%d%d%d", &op, &a, &b);
if( op )
{
start = a;
finish = b;
sum = 0;
query(1, 1, n);
printf("%d\n", sum);
}
else
{
index = a;
value = v[a] - b;
v[a] -= b;
update(1, 1, n);
}
}
return 0;
}
inline void update(int node, int left, int right)
{
if( left == right )
{
int_tree[ node ] = value;
return ;
}
int middle = ( left + right ) / 2;
if( index <= middle)
update( 2 * node, left, middle );
else
update( 2* node + 1, middle + 1, right );
int_tree[node] = int_tree[ 2 * node] + int_tree[ 2* node + 1];
}
inline void query(int node, int left, int right)
{
if( start <= left && right <= finish )
{
sum += int_tree[ node ];
return ;
}
int middle = ( left + right ) / 2;
if( start <= middle )
query( 2 * node, left, middle);
if( middle < finish)
query( 2* node + 1, middle + 1, right);
}