#include <fstream>
using namespace std;
const int nmax = 524288;
int ai[nmax];
void up(int nod, int left, int right, int index, int val)
{
if(left == right)
{
ai[nod] = val;
return;
}
int mid = left + (right - left) / 2;
if(index <= mid)
{
up(2 * nod + 1, left, mid, index, val);
}
else
{
up(2 * nod + 2, mid + 1, right, index, val);
}
ai[nod] = max(ai[2 * nod + 1], ai[2 * nod + 2]);
}
int query(int nod, int left, int right, int l, int r)
{
if(l <= left && right <= r)
{
return ai[nod];
}
int mid = left + (right - left ) / 2;
int ans = 0;
if(l <= mid)
{
ans += query(2 * nod + 1, left, mid, l, r);
}
if(mid < r)
{
ans += query(2 * nod + 2, mid + 1, right, l, r);
}
return ans;
}
int main()
{
ifstream in("arbint.in");
ofstream out("arbint.out");
int n, m;
in >> n >> m;
for(int i = 0;i < n;++i)
{
int nr;
in >> nr;
up(0, 0, n - 1, i, nr);
}
for(int i = 0;i < m;++i)
{
int op;
in >> op;
if(op == 0)
{
int a, b;
in >> a >> b;
--a, --b;
out << query(0, 0, n - 1, a, b);
}
else
{
int index, val;
in >> index >> val;
--index;
up(0, 0, n - 1, index, val);
}
}
in.close();
out.close();
}