#include using namespace std; const int N=100005; int n,q; long long a[N],s[4*N],M[4*N],m[4*N],L[4*N]; long long g(long long a,long long b){return b?g(b,a%b):a;} void p(int o,int l,int r){ if(L[o]==-1)return; int mid=(l+r)>>1; L[o<<1]=L[o<<1|1]=L[o]; s[o<<1]=M[o<<1]=m[o<<1]=L[o]*(mid-l+1); s[o<<1|1]=M[o<<1|1]=m[o<<1|1]=L[o]*(r-mid); L[o]=-1; } void u(int o){s[o]=s[o<<1]+s[o<<1|1];M[o]=max(M[o<<1],M[o<<1|1]);m[o]=min(m[o<<1],m[o<<1|1]);} void b(int o,int l,int r){ L[o]=-1; if(l==r){s[o]=M[o]=m[o]=a[l];return;} int mid=(l+r)>>1; b(o<<1,l,mid);b(o<<1|1,mid+1,r); u(o); } void u1(int o,int l,int r,int ql,int qr,long long x){ if(ql<=l&&r<=qr){L[o]=x;s[o]=M[o]=m[o]=x*(r-l+1);return;} p(o,l,r); int mid=(l+r)>>1; if(ql<=mid)u1(o<<1,l,mid,ql,qr,x); if(qr>mid)u1(o<<1|1,mid+1,r,ql,qr,x); u(o); } void u2(int o,int l,int r,int ql,int qr,long long x){ if(x==0)return; if(ql<=l&&r<=qr&&M[o]==m[o]){ long long nv=g(M[o],x); L[o]=nv;s[o]=nv*(r-l+1);M[o]=m[o]=nv; return; } p(o,l,r); int mid=(l+r)>>1; if(ql<=mid)u2(o<<1,l,mid,ql,qr,x); if(qr>mid)u2(o<<1|1,mid+1,r,ql,qr,x); u(o); } long long q3(int o,int l,int r,int ql,int qr){ if(ql<=l&&r<=qr)return M[o]; p(o,l,r); int mid=(l+r)>>1;long long R=0; if(ql<=mid)R=max(R,q3(o<<1,l,mid,ql,qr)); if(qr>mid)R=max(R,q3(o<<1|1,mid+1,r,ql,qr)); return R; } long long q4(int o,int l,int r,int ql,int qr){ if(ql<=l&&r<=qr)return s[o]; p(o,l,r); int mid=(l+r)>>1;long long R=0; if(ql<=mid)R+=q4(o<<1,l,mid,ql,qr); if(qr>mid)R+=q4(o<<1|1,mid+1,r,ql,qr); return R; } int main(){ scanf("%d%d",&n,&q); for(int i=1;i<=n;i++)scanf("%lld",a+i); b(1,1,n); while(q--){ int t,l,r;long long x=0; scanf("%d%d%d",&t,&l,&r); if(t==1)scanf("%lld",&x),u1(1,1,n,l,r,x); else if(t==2)scanf("%lld",&x),u2(1,1,n,l,r,x); else if(t==3)printf("%lld\n",q3(1,1,n,l,r)); else printf("%lld\n",q4(1,1,n,l,r)); } }