#include <bits/stdc++.h>
#define int long long
#define max(a,b) (a<b?b:a)
#define mp make_pair
#define pb push_back
using namespace std;
using i64 = long long;
int n,q,cnt=0;
const int maxn=2e5+10,maxb=sqrt(maxn)+10;
vector<int> arr(maxn,0);
i64 belong[maxn],tag[maxb],mini[maxb],sum[maxb],l[maxb],r[maxb];
int cntMin(int x, int y){
int xx=belong[x],yy=belong[y];
i64 ans=4e18;
if(xx==yy){
for(int i=x;i<=y;i++){
ans=min(ans,arr[i]+tag[xx]);
}
return ans;
}else{
for(int i=xx+1;i<=yy-1;i++){
ans=min(ans,mini[i]);
}
for(int i=x;i<=r[xx];i++)ans=min(ans,arr[i]+tag[xx]);
for(int i=l[yy];i<=y;i++)ans=min(ans,arr[i]+tag[yy]);
return ans;
}
}
void pushMin(int block){
mini[block]=4e18;
for(int i=l[block];i<=r[block];i++){
mini[block]=min(mini[block],arr[i]);
}
}
void add(int x, int y, int k){
int xx=belong[x],yy=belong[y];
if(xx==yy){
for(int i=x;i<=y;i++) arr[i]+=k,sum[xx]+=k;
pushMin(xx);
}else{
for(int i=xx+1;i<=yy-1;i++) sum[i]+=(r[i]-l[i]+1)*k,tag[i]+=k,mini[i]+=k;
for(int i=x;i<=r[xx];i++)arr[i]+=k,sum[xx]+=k;
for(int i=l[yy];i<=y;i++)arr[i]+=k,sum[yy]+=k;
pushMin(xx),pushMin(yy);
}
}
int cntSum(int x, int y){
int xx=belong[x],yy=belong[y],ans=0;
if(xx==yy){
for(int i=x;i<=y;i++)ans+=arr[i]+tag[xx];
return ans;
}else{
for(int i=xx+1;i<=yy-1;i++)ans+=sum[i];
for(int i=x;i<=r[xx];i++)ans+=arr[i]+tag[xx];
for(int i=l[yy];i<=y;i++)ans+=arr[i]+tag[yy];
return ans;
}
}
signed main(){
//ios::sync_with_stdio(0);
//cin.tie(nullptr);cout.tie(nullptr);
cin>>n>>q;
for(int i=1;i<=n;i++) cin>>arr[i];
int block=sqrt(n),t=n/block;
if(n%block) t++;
for(int i=1;i<=t;i++){
l[i]=(i-1)*block+1;
r[i]=i*block;
tag[i]=sum[i]=0;mini[i]=4e18;
}
r[t]=n;
for(int i=1;i<=n;i++){
belong[i]=(i-1)/block+1;
mini[belong[i]]=min(arr[i],mini[belong[i]]);
sum[belong[i]]+=arr[i];
}
char op;int x, y;
while(q--){
cin>>op>>x>>y;
if(op=='M'){
cout<<cntMin(x,y)<<"\n";
}else if(op=='P'){
int k;
cin>>k;
add(x,y,k);
}else{
cout<<cntSum(x,y)<<"\n";
}
}
return 0;
}
悬2关