RT
#include <bits/stdc++.h>
using namespace std;
#define ls(id) (id<<1)
#define rs(id) (id<<1|1)
const int maxn=200005;
int n,m;
int opt,l,r,k;
char ch;
int a[maxn];
int Min[maxn<<2],sum[maxn<<2];
void update(int id,int l,int r,int L,int R,int k){
if(L<=l&&r<=R){
sum[id]+=k;
Min[id]+=k;
return;
}
int mid=l+r>>1;
if(L<=mid)update(ls(id),l,mid,L,R,k);
if(R> mid)update(rs(id),mid+1,r,L,R,k);
sum[id]=sum[ls(id)]+sum[rs(id)];
Min[id]=min(Min[ls(id)],Min[rs(id)]);
}
void push_down(int id){
sum[ls(id)]+=sum[id];
sum[rs(id)]+=sum[id];
Min[ls(id)]+=Min[id];
Min[rs(id)]+=Min[id];
sum[id]=Min[id]=0;
}
int query_sum(int id,int l,int r,int L,int R){
if(L<=l&&r<=R)return a[l]+sum[id];
int mid=l+r>>1;
int ans=0;
if(L<=mid)ans+=query_sum(ls(id),l,mid,L,R);
if(R> mid)ans+=query_sum(rs(id),mid+1,r,L,R);
return ans;
}
int query_min(int id,int l,int r,int L,int R){
if(L<=l&&r<=R)return a[l]+Min[id];
int mid=l+r>>1;
int ans=0x3f3f3f3f;
if(L<=mid)ans=min(ans,query_min(ls(id),l,mid,L,R));
if(R> mid)ans=min(ans,query_min(rs(id),mid+1,r,L,R));
return ans;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++){
cin>>ch>>l>>r;
if(ch=='M'){//min
cout<<query_min(1,1,n,l,r)<<"\n";
}
else if(ch=='S'){//sum
cout<<query_sum(1,1,n,l,r)<<"\n";
}
else {
cin>>k;
update(1,1,n,l,r,k);
}
}
return 0;
}