rt,40pts
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <queue>
#define int long long
using namespace std;
inline void in(int &x){
int f=1;x=0;char c=getchar();
while (c>'9'||c<'0'){if (c=='-') f=-1;c=getchar();}
while (c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
x*=f;
}
int n,m,l,r,x,k;
int Tree[100005],Tree1[100005],a[100005];
string op;
inline int lowbit (int x){
return x&(-x);
}
inline void update (int x,int k){
while (x<=n){
Tree[x]+=k;
x+=lowbit(x);
}
}
inline void update1 (int x,int k){
while (x<=n){
Tree1[x]+=k;
x+=lowbit(x);
}
}
inline int query (int x){
int ans=0;
while (x){
ans+=Tree[x];
x-=lowbit(x);
}
return ans;
}
inline int query1 (int x){
int ans=0;
while (x){
ans+=Tree1[x];
x-=lowbit(x);
}
return ans;
}
signed main(){
in (n);in (m);
for (int i=1;i<=n;++i){
in (a[i]);update (i,a[i]);
update1 (i,i*a[i]);
}
for (int i=1;i<=m;++i){
cin>>op;
if (op=="Modify"){
in (x);in (k);
update (x,k-a[x]);
update1 (x,(k-a[x])*x);
}
if (op=="Query"){
in (r);
printf ("%lld\n",(r+1)*query (r)-query1 (r));
}
}
return 0;
}