#include <fstream>
using namespace std;
ifstream fin( "datorii.in" );
ofstream fout( "datorii.out" );
const int MaxN = 15001;
int tree[4 * MaxN];
inline int left( int node ) {
return (node << 1);
}
inline int right( int node ) {
return (node << 1) | 1;
}
int ux, uval;
void update( int node, int l, int r ) {
int mid = (l + r) >> 1;
if ( l == r ) {
tree[node] -= uval;
return;
}
if ( ux <= mid ) {
update( left( node ), l, mid );
} else {
update( right( node ), mid + 1, r );
}
tree[node] = tree[left( node )] + tree[right( node )];
}
int qx, qy;
int query( int node, int l, int r ) {
int mid = (l + r) >> 1, s = 0;
if ( qx <= l && r <= qy ) {
return tree[node];
}
if ( qx <= mid ) {
s += query( left( node ), l, mid );
}
if ( qy > mid ) {
s += query( right( node ), mid + 1, r );
}
return s;
}
int main() {
int n, m, a;
fin >> n >> m;
for ( int i = 1; i <= n; ++i ) {
fin >> a;
ux = i, uval = -a;
update( 1, 1, n );
}
while ( m-- ) {
fin >> a;
if ( a == 0 ) {
fin >> ux >> uval;
update( 1, 1, n );
} else {
fin >> qx >> qy;
fout << query( 1, 1, n ) << "\n";
}
}
fin.close();
fout.close();
return 0;
}