CSES - Shared codeLink to this code: https://cses.fi/paste/3e16621924d220a9ad7f79/
// Radhe Radhe
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define dl long double
#define pi pair<int, int>
#define pl pair<ll, ll>
#define vi vector<int>
#define vc vector<char>
#define vb vector<bool>
#define vs vector<string>
#define vl vector<ll>
#define vpi vector<pi>
#define vpl vector<pl>
#define ff first
#define ss second
#define nline "\n"
#define no cout<<"NO"<<endl
#define yes cout<<"YES"<<endl
#define here cout<<"here"<<endl
#define all(a) a.begin(),a.end()
#define allv(a) a.rbegin(),a.rend()
#define sortAll(a) sort(all(a))
#define revAll(a) reverse(all(a))
#define sumAll(a) accumulate(all(a), 0LL)
#define rep(i,a,b) for(ll i=(a);i<(b);++i)
#define repv(i,a,b) for(ll i=(a);i>=(b);--i)
void fastio() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}
template<typename T>
void inp(vector<T>& arr) {
for (auto& a : arr) cin >> a;
}
template<typename T>
void print(const vector<T>& arr) {
for (const auto& val : arr) {
cout << val << " ";
}
cout << "\n";
}
vector<int> sieve(int n) {
vector<int> isPrime(n + 1, 1);
isPrime[0] = isPrime[1] = 0;
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = 0;
}
}
}
return isPrime;
}
const ll M = 1e9 + 7;
bool even(ll a) { return (a % 2) == 0; }
bool odd(ll a) { return a & 1; }
ll mod(ll x) { return ((x % M + M) + M); }
ll add(ll a, ll b) { return mod(mod(a)+mod(b)); }
ll mul(ll a, ll b) { return mod(mod(a)*mod(b)); }
ll power(ll x, ll y) {
if (y == 0) return 1;
ll p = power(x, y / 2);
if (y & 1) return (((p * p) % M) * x) % M;
return (p * p) % M;
}
ll mod_inverse(ll a, ll m) {
return a <= 1 ? a :
m-(ll)(m / a) * mod_inverse(m % a, m) % m;
}
#define debug(x) cerr << #x << " = " << (x) << endl;
/* -------------------------------------- */
class FenwickTree {
public:
vector<ll> fen; ll n;
FenwickTree(ll size) {
n = size;
fen.assign(n+1,0);;
}
void build(vector<ll>& arr) {
for (ll i = 0; i < n; i++) {
update(i + 1, arr[i]);
}
}
void update(ll idx, ll val) {
while (idx <= n) {
fen[idx] += val;
idx = idx+(idx&(-idx));
}
}
ll sum(ll idx) {
ll res = 0;
while (idx > 0) {
res += fen[idx];
idx = idx-(idx&(-idx));
}return res;
}
ll rangeSum(ll left,ll right) {
return sum(right) - sum(left - 1);
}
};
void solve(){
ll n,q;
cin>>n>>q;
vl a(n);inp(a);
FenwickTree ft(n);
ft.build(a);
rep(i,0,q){
ll qr,idx,val;
cin>>qr>>idx>>val;
if(qr==1){
ft.update(idx, (ll)(val-a[idx-1]));
a[idx-1] = val;
}
if(qr==2){
cout<<ft.rangeSum(idx,val)<<nline;
}
}
}
signed main() {
fastio();
int t = 1;
// cin>>t;
while (t--) {
solve();
}
return 0;
}