#include <bits/stdc++.h>
#define N 100000
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, m;
vector <int> a;
int sol[4 * N + 1];
void creare_arbore(int st, int dr, int nod)
{
if(st != dr)
{
int mij = (st + dr) / 2, aux1, aux2;
creare_arbore(st, mij, 2 * nod);
creare_arbore(mij + 1, dr, 2 * nod + 1);
sol[nod] = sol[2 * nod] + sol[2 * nod + 1];
}
else sol[nod] = a[st];
}
int answer(int x, int y, int st, int dr, int nod)
{
if(x <= st && dr <= y)
return sol[nod];
else
{
int aux1, aux2, mij = (st + dr) / 2;
if( x <= mij && mij + 1 <= y)
return answer(x, mij, st, mij, 2 * nod) + answer(mij + 1, y, mij + 1, dr, 2 * nod + 1);
else if( x >= mij + 1 )
return answer(x, y, mij + 1, dr, 2 * nod + 1);
else if( y <= mij )
return answer(x, y, st, mij, 2 * nod);
}
}
void update(int z, int v, int st, int dr, int nod)
{
}
void citire()
{
bool op;
int x, st, dr, z, v;
fin >> n >> m;
a.push_back(0);
for(int i = 1; i <= n; i++)
fin >> x, a.push_back(x);
creare_arbore(1, n, 1);
/*
for(int i = 0; i <= 3; i++, fout << '\n')
for(int j = 1 << i; j < (1 << (i + 1)); j++)
fout << sol[j] << ' ';*/
for(int i = 1; i <= m; i++)
{
fin >> op;
if(!op)
{
fin >> z >> v;
update(z, v, 1, n, 1);
}
else
{
fin >> st >> dr;
fout << answer(st, dr, 1, n, 1) << '\n';
}
}
fin.close();
fout.close();
}
int main()
{
citire();
return 0;
}