// とおってー! #pragma GCC optimize ("O3") #pragma GCC target ("avx") #include using namespace std; using int64 = long long; int main() { int N, Q; int A[100000]; scanf("%d %d", &N, &Q); for(int i = 0; i < N; i++) { scanf("%lld", &A[i]); } for(int i = 0; i < Q; i++) { int a, b, c, d; scanf("%d %d %d", &a, &b, &c); --b; if(a == 1) { scanf("%d", &d); for(int j = b; j < c; j++) A[j] = d; } else if(a == 2) { scanf("%d", &d); for(int j = b; j < c; j++) A[j] = __gcd(A[j], d); } else if(a == 3) { int ret = 0; for(int j = b; j < c; j++) ret = max(ret, A[j]); printf("%d\n", ret); } else { int64 ret = 0; for(int j = b; j < c; j++) ret += A[j]; printf("%lld\n", ret); } } }