#include #include using namespace std; typedef long long LL; const int N = 100010; int n, q, a[N]; int GCD(int x, int y) { return y ? GCD(y, x % y) : x; } int main() { // freopen("gcdmax.in", "r", stdin); // freopen("gcdmax.out", "w", stdout); scanf("%d%d", &n, &q); for (int i = 1; i <= n; ++i) scanf("%d", &a[i]); while (q--) { int op; scanf("%d", &op); if (op == 1) { int l, r, x; scanf("%d%d%d", &l, &r, &x); for (int i = l; i <= r; ++i) a[i] = x; } else if (op == 2) { int l, r, x; scanf("%d%d%d", &l, &r, &x); for (int i = l; i <= r; ++i) a[i] = GCD(a[i], x); } else if (op == 3) { int l, r; scanf("%d%d", &l, &r); int ma = 0; for (int i = l; i <= r; ++i) ma = max(ma, a[i]); printf("%d\n", ma); } else { int l, r; scanf("%d%d", &l, &r); LL sum = 0LL; for (int i = l; i <= r; ++i) sum += a[i]; printf("%lld\n", sum); } } return 0; }