#include<iostream>
using namespace std;
long long tree[800005][3],lazy_tag[800005],a[200005];
void push_down(long long s,long long i)
{
if(s>1)
{
lazy_tag[i*2]+=lazy_tag[i];
lazy_tag[i*2+1]+=lazy_tag[i];
}
tree[i][1]+=lazy_tag[i]*s;
tree[i][2]+=lazy_tag[i]*s;
lazy_tag[i]=0;
}
void build(long long l,long long r,long long i)
{
if(l==r)
{
tree[i][1]=a[l];
tree[i][2]=a[l];
return;
}
long long mid=(l+r)/2;
build(l,mid,i*2);
build(mid+1,r,i*2+1);
tree[i][1]=tree[i*2][1]+tree[i*2+1][1];
tree[i][2]=min(tree[i*2][2],tree[i*2+1][2]);
}
long long find(long long l,long long r,long long ll,long long rr,long long i)
{
push_down(r-l+1,i);
if(rr<l||r<ll)
{
return 0;
}
if(ll<=l&&r<=rr)
{
return tree[i][1];
}
long long mid=(l+r)/2;
return find(l,mid,ll,rr,i*2)+find(mid+1,r,ll,rr,i*2+1);
}
long long ask(long long l,long long r,long long ll,long long rr,long long i)
{
push_down(r-l+1,i);
if(rr<l||r<ll)
{
return 2147483647;
}
if(ll<=l&&r<=rr)
{
return tree[i][2];
}
long long mid=(l+r)/2;
return min(ask(l,mid,ll,rr,i*2),ask(mid+1,r,ll,rr,i*2+1));
}
void add(long long l,long long r,long long ll,long long rr,long long i,long long s)
{
push_down(r-l+1,i);
if(rr<l||r<ll)
{
return;
}
else if(ll<=l&&r<=rr)
{
lazy_tag[i]+=s;
push_down(r-l+1,i);
}
else if(l!=r)
{
tree[i][1]+=s*(min(rr,r)-max(ll,l)+1);
tree[i][2]+=s*(min(rr,r)-max(ll,l)+1);
long long mid=(l+r)/2;
add(l,mid,ll,rr,i*2,s);
add(mid+1,r,ll,rr,i*2+1,s);
}
else
{
tree[i][1]+=s;
tree[i][2]+=s;
}
}
int main()
{
long long n,m;
cin>>n>>m;
for(long long i=1;i<=n;i++)
{
cin>>a[i];
}
build(1,n,1);
while(m--)
{
long long l,r,k;
char ch;
cin>>ch;
if(ch=='P')
{
cin>>l>>r>>k;
add(1,n,l,r,1,k);
}
else if(ch=='M')
{
cin>>l>>r;
cout<<ask(1,n,l,r,1)<<endl;
}
else
{
cin>>l>>r;
cout<<find(1,n,l,r,1)<<endl;
}
}
return 0;
}