#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 3e5 + 5;
const int MAX_A = 1e6 + 5;
// Nhận xét quan trọng: D(a(i)) ~ cbrt(a(i)), đối với a(i) <= 1e6 thì tối đa mỗi a(i) chỉ bị tác động 7 - 8 lần
// Update 1 vị trí tương đương update một nút lá trong cây Segment Tree, mỗi lần update tốn O(log)
// => Mỗi nút lá tối đa tốn O(8 * log) chi phí update
// => Update cả mảng thì tối đa tốn O(8 * nlogn)
// => Độ phức tạp O(qlogn + nlogn) = O((q + n)logn)
struct node {
int mx;
ll sum;
node() {
mx = -INF, sum = 0;
}
node(int x) {
mx = sum = x;
}
node operator+(const node& other) const {
node c;
c.mx = max(mx, other.mx);
c.sum = sum + other.sum;
return c;
}
};
int n, q;
int a[N];
int D[MAX_A];
void sieve() {
for (int i = 1; i < MAX_A; i++) {
for (int j = i; j < MAX_A; j += i) D[j]++;
}
}
node seg[4 * N];
void build(int id, int l, int r) {
if (l == r) {
seg[id] = node(a[l]);
return;
}
int mid = (l + r) >> 1;
build(id * 2, l, mid);
build(id * 2 + 1, mid + 1, r);
seg[id] = seg[id * 2] + seg[id * 2 + 1];
}
// Để check một nút có cần được update nữa hay k thì ta quan tâm giá trị max của đoạn [l, r] mà nó quản lí
// max <= 2 thì coi như k cần update nữa
void update(int id, int l, int r, int u, int v) {
if (l > v || r < u) return;
if (seg[id].mx <= 2) return;
if (l == r) {
a[l] = D[a[l]];
seg[id] = a[l];
return;
}
int mid = (l + r) >> 1;
update(id * 2, l, mid, u, v);
update(id * 2 + 1, mid + 1, r, u, v);
seg[id] = seg[id * 2] + seg[id * 2 + 1];
}
node get(int id, int l, int r, int u, int v) {
if (l > v || r < u) return node();
if (u <= l && r <= v) return seg[id];
int mid = (l + r) >> 1;
return get(id * 2, l, mid, u, v) + get(id * 2 + 1, mid + 1, r, u, v);
}
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
sieve();
build(1, 1, n);
while (q--) {
int type, l, r;
cin >> type >> l >> r;
if (type == 1) {
update(1, 1, n, l, r);
}
else {
cout << get(1, 1, n, l, r).sum << '\n';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDNlNSArIDU7ICAKY29uc3QgaW50IE1BWF9BID0gMWU2ICsgNTsgIAoKLy8gTmjhuq1uIHjDqXQgcXVhbiB0cuG7jW5nOiBEKGEoaSkpIH4gY2JydChhKGkpKSwgxJHhu5FpIHbhu5tpIGEoaSkgPD0gMWU2IHRow6wgdOG7kWkgxJFhIG3hu5dpIGEoaSkgY2jhu4kgYuG7iyB0w6FjIMSR4buZbmcgNyAtIDggbOG6p24KLy8gVXBkYXRlIDEgduG7iyB0csOtIHTGsMahbmcgxJHGsMahbmcgdXBkYXRlIG3hu5l0IG7DunQgbMOhIHRyb25nIGPDonkgU2VnbWVudCBUcmVlLCBt4buXaSBs4bqnbiB1cGRhdGUgdOG7kW4gTyhsb2cpCi8vID0+IE3hu5dpIG7DunQgbMOhIHThu5FpIMSRYSB04buRbiBPKDggKiBsb2cpIGNoaSBwaMOtIHVwZGF0ZQovLyA9PiBVcGRhdGUgY+G6oyBt4bqjbmcgdGjDrCB04buRaSDEkWEgdOG7kW4gTyg4ICogbmxvZ24pCi8vID0+IMSQ4buZIHBo4bupYyB04bqhcCBPKHFsb2duICsgbmxvZ24pID0gTygocSArIG4pbG9nbikKCnN0cnVjdCBub2RlIHsKCWludCBteDsgCglsbCBzdW07CgkKCW5vZGUoKSB7CgkJbXggPSAtSU5GLCBzdW0gPSAwOyAgCgl9CgoJbm9kZShpbnQgeCkgewoJCW14ID0gc3VtID0geDsgIAoJfQoKCW5vZGUgb3BlcmF0b3IrKGNvbnN0IG5vZGUmIG90aGVyKSBjb25zdCB7CgkJbm9kZSBjOyAgCgkJYy5teCA9IG1heChteCwgb3RoZXIubXgpOyAKCQljLnN1bSA9IHN1bSArIG90aGVyLnN1bTsgCgkJcmV0dXJuIGM7IAoJfQp9OyAKCmludCBuLCBxOyAKaW50IGFbTl07IAppbnQgRFtNQVhfQV07IAoKdm9pZCBzaWV2ZSgpIHsKCWZvciAoaW50IGkgPSAxOyBpIDwgTUFYX0E7IGkrKykgewoJCWZvciAoaW50IGogPSBpOyBqIDwgTUFYX0E7IGogKz0gaSkgRFtqXSsrOyAKCX0KfQoKbm9kZSBzZWdbNCAqIE5dOyAKCnZvaWQgYnVpbGQoaW50IGlkLCBpbnQgbCwgaW50IHIpIHsKCWlmIChsID09IHIpIHsKCQlzZWdbaWRdID0gbm9kZShhW2xdKTsgIAoJCXJldHVybjsgCgl9CglpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKCWJ1aWxkKGlkICogMiwgbCwgbWlkKTsgCglidWlsZChpZCAqIDIgKyAxLCBtaWQgKyAxLCByKTsgCglzZWdbaWRdID0gc2VnW2lkICogMl0gKyBzZWdbaWQgKiAyICsgMV07IAp9CgovLyDEkOG7gyBjaGVjayBt4buZdCBuw7p0IGPDsyBj4bqnbiDEkcaw4bujYyB1cGRhdGUgbuG7r2EgaGF5IGsgdGjDrCB0YSBxdWFuIHTDom0gZ2nDoSB0cuG7iyBtYXggY+G7p2EgxJFv4bqhbiBbbCwgcl0gbcOgIG7DsyBxdeG6o24gbMOtCi8vIG1heCA8PSAyIHRow6wgY29pIG5oxrAgayBj4bqnbiB1cGRhdGUgbuG7r2EgCnZvaWQgdXBkYXRlKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYpIHsKCWlmIChsID4gdiB8fCByIDwgdSkgcmV0dXJuOyAgCgoJaWYgKHNlZ1tpZF0ubXggPD0gMikgcmV0dXJuOyAKCglpZiAobCA9PSByKSB7CgkJYVtsXSA9IERbYVtsXV07ICAKCQlzZWdbaWRdID0gYVtsXTsgCgkJcmV0dXJuOyAgCgl9CgoJaW50IG1pZCA9IChsICsgcikgPj4gMTsgCgl1cGRhdGUoaWQgKiAyLCBsLCBtaWQsIHUsIHYpOyAKCXVwZGF0ZShpZCAqIDIgKyAxLCBtaWQgKyAxLCByLCB1LCB2KTsgCgoJc2VnW2lkXSA9IHNlZ1tpZCAqIDJdICsgc2VnW2lkICogMiArIDFdOyAKfQoKbm9kZSBnZXQoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdikgewoJaWYgKGwgPiB2IHx8IHIgPCB1KSByZXR1cm4gbm9kZSgpOyAKCglpZiAodSA8PSBsICYmIHIgPD0gdikgcmV0dXJuIHNlZ1tpZF07IAoKCWludCBtaWQgPSAobCArIHIpID4+IDE7IAoJcmV0dXJuIGdldChpZCAqIDIsIGwsIG1pZCwgdSwgdikgKyBnZXQoaWQgKiAyICsgMSwgbWlkICsgMSwgciwgdSwgdik7IAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyAgCQoJY2luID4+IG4gPj4gcTsgCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOyAgCgkJCQoJc2lldmUoKTsgICAKCglidWlsZCgxLCAxLCBuKTsgCgoJd2hpbGUgKHEtLSkgewoJCWludCB0eXBlLCBsLCByOyAKCQljaW4gPj4gdHlwZSA+PiBsID4+IHI7IAoKCQlpZiAodHlwZSA9PSAxKSB7CgkJCXVwZGF0ZSgxLCAxLCBuLCBsLCByKTsgCgkJfQoJCWVsc2UgewoJCQljb3V0IDw8IGdldCgxLCAxLCBuLCBsLCByKS5zdW0gPDwgJ1xuJzsgCgkJfQoJfQp9