#include<bits/stdc++.h>
using namespace std;
template<typename X, typename Y>
bool chmax(X& a, Y b) { return (a < b) ? a = b, 1 : 0; }
template<typename X, typename Y>
bool chmin(X& a, Y b) { return (a > b) ? a = b, 1 : 0; }
using ll = long long;
const int N = 1e6+5;
int n, q, a[N];
int mx[4 * N];
ll st[4 * N];
void pull(int id) {
st[id] = st[id << 1] + st[id << 1 | 1];
mx[id] = max(mx[id << 1], mx[id << 1 | 1]);
}
void build(int id, int l, int r) {
if (l == r) {
st[id] = mx[id] = a[l];
return;
}
int mid = (l + r) >> 1;
build(id << 1, l, mid);
build(id << 1 | 1, mid + 1, r);
pull(id);
}
void update(int id, int l, int r, int u, int v, int x) {
if (v < l || r < u || mx[id] < x) return;
if (l == r) {
st[id] %= x;
mx[id] %= x;
return;
}
int mid = (l + r) >> 1;
update(id << 1, l, mid, u, v, x);
update(id << 1 | 1, mid + 1, r, u, v, x);
pull(id);
}
ll query(int id, int l, int r, int u, int v) {
if (v < l || r < u) return 0;
if (u <= l && r <= v) return st[id];
int mid = (l + r) >> 1;
return query(id << 1, l, mid, u, v) + query(id << 1 | 1, mid + 1, r, u, v);
}
void solve() {
cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
build(1, 1, n);
while (q--) {
int type, l, r; cin >> type >> l >> r;
if (type == 1) {
int k; cin >> k;
update(1, 1, n, l, r, k);
} else cout << query(1, 1, n, l, r) << '\n';
}
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int tests = 1; // cin >> tests;
while (tests--) solve();
#ifdef LOCAL
cerr << "\nTime elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPHR5cGVuYW1lIFgsIHR5cGVuYW1lIFk+CmJvb2wgY2htYXgoWCYgYSwgWSBiKSB7IHJldHVybiAoYSA8IGIpID8gYSA9IGIsIDEgOiAwOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBYLCB0eXBlbmFtZSBZPgpib29sIGNobWluKFgmIGEsIFkgYikgeyByZXR1cm4gKGEgPiBiKSA/IGEgPSBiLCAxIDogMDsgfQoKdXNpbmcgbGwgPSBsb25nIGxvbmc7Cgpjb25zdCBpbnQgTiA9IDFlNis1OwoKaW50IG4sIHEsIGFbTl07CmludCBteFs0ICogTl07CmxsIHN0WzQgKiBOXTsKCnZvaWQgcHVsbChpbnQgaWQpIHsKICAgIHN0W2lkXSA9IHN0W2lkIDw8IDFdICsgc3RbaWQgPDwgMSB8IDFdOwogICAgbXhbaWRdID0gbWF4KG14W2lkIDw8IDFdLCBteFtpZCA8PCAxIHwgMV0pOwp9Cgp2b2lkIGJ1aWxkKGludCBpZCwgaW50IGwsIGludCByKSB7CiAgICBpZiAobCA9PSByKSB7CiAgICAgICAgc3RbaWRdID0gbXhbaWRdID0gYVtsXTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOwogICAgYnVpbGQoaWQgPDwgMSwgbCwgbWlkKTsKICAgIGJ1aWxkKGlkIDw8IDEgfCAxLCBtaWQgKyAxLCByKTsKICAgIHB1bGwoaWQpOwp9Cgp2b2lkIHVwZGF0ZShpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHUsIGludCB2LCBpbnQgeCkgewogICAgaWYgKHYgPCBsIHx8IHIgPCB1IHx8IG14W2lkXSA8IHgpIHJldHVybjsKICAgIGlmIChsID09IHIpIHsKICAgICAgICBzdFtpZF0gJT0geDsKICAgICAgICBteFtpZF0gJT0geDsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOwogICAgdXBkYXRlKGlkIDw8IDEsIGwsIG1pZCwgdSwgdiwgeCk7CiAgICB1cGRhdGUoaWQgPDwgMSB8IDEsIG1pZCArIDEsIHIsIHUsIHYsIHgpOwogICAgcHVsbChpZCk7Cn0KCmxsIHF1ZXJ5KGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYpIHsKICAgIGlmICh2IDwgbCB8fCByIDwgdSkgcmV0dXJuIDA7CiAgICBpZiAodSA8PSBsICYmIHIgPD0gdikgcmV0dXJuIHN0W2lkXTsKICAgIGludCBtaWQgPSAobCArIHIpID4+IDE7CiAgICByZXR1cm4gcXVlcnkoaWQgPDwgMSwgbCwgbWlkLCB1LCB2KSArIHF1ZXJ5KGlkIDw8IDEgfCAxLCBtaWQgKyAxLCByLCB1LCB2KTsKfQoKdm9pZCBzb2x2ZSgpIHsKICAgIGNpbiA+PiBuID4+IHE7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOwogICAgYnVpbGQoMSwgMSwgbik7CiAgICB3aGlsZSAocS0tKSB7CiAgICAgICAgaW50IHR5cGUsIGwsIHI7IGNpbiA+PiB0eXBlID4+IGwgPj4gcjsKICAgICAgICBpZiAodHlwZSA9PSAxKSB7CiAgICAgICAgICAgIGludCBrOyBjaW4gPj4gazsKICAgICAgICAgICAgdXBkYXRlKDEsIDEsIG4sIGwsIHIsIGspOwogICAgICAgIH0gZWxzZSBjb3V0IDw8IHF1ZXJ5KDEsIDEsIG4sIGwsIHIpIDw8ICdcbic7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUoTlVMTCk7CgogICAgaW50IHRlc3RzID0gMTsgLy8gY2luID4+IHRlc3RzOwogICAgd2hpbGUgKHRlc3RzLS0pIHNvbHZlKCk7CgogICAgI2lmZGVmIExPQ0FMCiAgICBjZXJyIDw8ICJcblRpbWUgZWxhcHNlZDogIiA8PCAxLjAgKiBjbG9jaygpIC8gQ0xPQ0tTX1BFUl9TRUMgPDwgIiBzLlxuIjsKICAgICNlbmRpZgogICAgcmV0dXJuIDA7Cn0=