#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N = 400009;
ll n , q , x , y ,z;
ll a[N];
string s;
struct E
{
ll l , r , mm,sum,lz;
}e[N*4 + 10];
void build(ll h,ll l,ll r)
{
e[h].l = l;
e[h].r = r;
e[h].mm = N;
e[h].lz = 0;
if(l == r)
{
e[h].sum = a[l];
e[h].mm = a[l];
return ;
}
ll mid = (l + r) / 2;
build(h*2,l,mid);
build(h*2+1 , mid+1, r);
e[h].sum = e[h*2].sum + e[h*2+1].sum;
e[h].mm = min(e[h*2].mm , e[h*2+1].mm);
}
void down(ll h)
{
if(e[h].lz)
{
e[h*2].sum += (ll)(e[h*2].r - e[h*2].l+1)*e[h].lz;
e[h*2].mm += e[h].lz;
e[h*2+1].sum += (ll)(e[h*2+1].r - e[h*2+1].l+1)*e[h].lz;
e[h*2+1].mm += e[h].lz;
e[h*2].lz += e[h].lz;
e[h*2+1].lz += e[h].lz;
e[h].lz = 0;
}
}
void addnum(ll h , ll l , ll r , ll num)
{
if(e[h].l >= l && e[h].r <= r)
{
e[h].sum += (e[h].r-e[h].l+1) * num;
e[h].mm += num;
e[h].lz = num;
return ;
}
down(h);
ll mid = (e[h].l + e[h].r) / 2;
if(l <= mid)
{
addnum(h*2 , l , r , num);
}
if(mid+1 <= r)
{
addnum(h*2+1, l , r , num);
}
e[h].sum = e[h*2].sum + e[h*2+1].sum;
e[h].mm = min(e[h*2].mm , e[h*2+1].mm);
}
ll finds(ll h ,ll l , ll r)
{
if(e[h].l >= l && e[h].r <= r)
{
return e[h].sum;
}
down(h);
ll mid = (e[h].l + e[h].r) / 2;
ll ans = 0;
if(mid >= l)
{
ans += finds(h*2 , l , r);
}
if(mid+1 <= r)
{
ans += finds(h*2+1 , l , r);
}
return ans;
}
ll findm(ll h,ll l , ll r)
{
if(e[h].l >= l && e[h].r <= r)
{
return e[h].mm;
}
down(h);
ll ans = 0x3f3f3f3f;
ll mid = (e[h].l + e[h].r) / 2;
if(mid >= l)
{
ans = min(ans , findm(h*2 , l , r) );
}
if(mid + 1 <= r)
{
ans = min (ans , findm(h*2+1, l , r) );
}
return ans;
}
signed main()
{
scanf("%lld %lld",&n , &q);
for(ll i=1; i <= n; i++)
{
scanf("%lld",&a[i]);
}
build(1 , 1 , n);
for(ll i=1; i <= q; i++)
{
cin >> s;
if(s == "M")
{
scanf("%lld %lld",&x,&y);
printf("%lld\n",findm(1,x,y));
}
else if(s == "P")
{
scanf("%lld %lld %lld" , &x,&y,&z);
addnum(1,x , y , z);
}
else if(s == "S")
{
scanf("%lld %lld",&x,&y);
printf("%lld\n",finds(1,x,y));
}
}
return 0;
}