#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+234;
#define int long long
int n,m,s;
int a[N], t[N*4];
void pushup(int cur){
t[cur] = t[cur<<1] + t[cur<<1|1];
}
void build(int cur, int l, int r){
if (l == r){
t[cur] = a[l];
return ;
}
int mid = l + r>> 1;
build(cur<<1,l,mid);
build(cur<<1|1,mid+1,r);
pushup(cur);
}
void update1(int cur, int l,int r,int ql, int qr, int m){
if (l == r ){
t[cur] %= m;
return ;
}
int mid = l + r >> 1;
if (ql <= mid) update1(cur<<1,l,mid,ql,qr,m);
if (qr > mid) update1(cur<<1|1,mid+1,r,ql,qr,m);
pushup(cur);
}
void update2(int cur, int l, int r, int x, int val){
if (l == r){
t[cur] = val;
return;
}
int mid = l+ r>>1;
if (x <= mid) update2(cur<<1,l,mid,x,val);
else update2(cur<<1|1,mid+1,r,x,val);
pushup(cur);
}
void query(int cur, int l, int r, int ql,int qr){
if (l == r){
s += t[cur];
return ;
}
int mid = l + r >> 1;
if (ql <= mid) query(cur<<1,l,mid,ql,qr);
if (qr > mid) query(cur<<1|1,mid+1,r,ql,qr);
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i =1; i <= n; i++){
cin >> a[i];
}
build(1,1,n);
for (int i = 1; i<= m; i++){
int op,l,r,k,x;
cin >> op;
if (op == 1){
cin >> l >> r;
s = 0;
query(1,1,n,l,r);
cout << s << '\n';
}
if (op == 2){
cin >> l >> r >> x;
update1(1,1,n,l,r,x);
}
if(op == 3){
cin >> k>>x;
update2(1,1,n,k,x);
}
}
return 0;
}