func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 100010;   long long read() {     long long x = 0, f = 1;     char ch = getchar();     while (ch <  0  || ch >  9 ) {       if (ch ==  - ) f = -1;       ch = getchar();     }     while (ch >=  0  && ch <=  9 ) {       x = (x << 3) + (x << 1) + ch -  0 ;       ch = getchar();     }     return x * f;   }   long long n, m, a[N], op, x, y, z;   struct SegmentTree {     long long l, r, sum, maxn;   } tree[N << 2];   void pushup(int k) {     tree[k].sum = tree[k << 1].sum + tree[k << 1 | 1].sum;     tree[k].maxn = max(tree[k << 1].maxn, tree[k << 1 | 1].maxn);   }   void build(int k, int l, int r) {     tree[k].l = l, tree[k].r = r;     if (l == r) {       tree[k].sum = tree[k].maxn = a[l];       return;     }     int mid = (l + r) / 2;     build(k << 1, l, mid), build(k << 1 | 1, mid + 1, r);     pushup(k);   }   void changemod(int k, int ql, int qr, long long mod) {     if (tree[k].maxn < mod) return;     if (ql <= tree[k].l && tree[k].r <= qr && tree[k].l == tree[k].r) {       tree[k].sum %= mod, tree[k].maxn %= mod;       return;     }     int mid = (tree[k].l + tree[k].r) / 2;     if (ql <= mid) changemod(k << 1, ql, qr, mod);     if (mid < qr) changemod(k << 1 | 1, ql, qr, mod);     pushup(k);   }   void modify(int k, int q, long long v) {     if (tree[k].l > q || q > tree[k].r) return;     if (tree[k].l == tree[k].r) {       tree[k].sum = tree[k].maxn = v;       return;     }     int mid = (tree[k].l + tree[k].r) / 2;     if (q <= mid)       modify(k << 1, q, v);     else       modify(k << 1 | 1, q, v);     pushup(k);   }   long long query(int k, int ql, int qr) {     long long res = 0;     if (ql <= tree[k].l && tree[k].r <= qr) return tree[k].sum;     int mid = (tree[k].l + tree[k].r) / 2;     if (ql <= mid) res += query(k << 1, ql, qr);     if (mid < qr) res += query(k << 1 | 1, ql, qr);     return res;   }   int main() {     n = read(), m = read();     for (int i = 1; i <= n; i++) a[i] = read();     build(1, 1, n);     while (m--) {       op = read();       if (op == 1) {         x = read(), y = read();         printf( %lld n , query(1, x, y));       }       if (op == 2) {         x = read(), y = read(), z = read();         changemod(1, x, y, z);       }       if (op == 3) {         x = read(), y = read();         modify(1, x, y);       }     }     return 0;   }   