// Author: pppssslc
// Date: 15/08/2026
#include<bits/stdc++.h>

using namespace std;

template<class X, class Y> void mini(X &x, const Y &y){
	x = min(x, y);
}

template<class X, class Y> void maxi(X &x, const Y &y){
	x = max(x, y);
}

typedef string str;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 i128;
typedef double db;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pldld;
typedef pair<db, db> pdd;
typedef pair<char, char> pcc;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<char> vc;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef vector<vector<int>> vii;
typedef vector<vector<ll>> vll;
typedef vector<vector<char>> vcc;
typedef map<int, int> mpii;
typedef map<ll, ll> mpll;
typedef set<int> si;
typedef set<ll> sl;
typedef complex<ld> cd;

#define se second
#define fi first
#define Rep(i, l, r, x) for(int i = l; i < (int)r; i += x)
#define Repd(i, l, r, x) for(int i = l; i > (int)r; i -= x)
#define For(i, l, r, x) for(int i = l; i <= (int)r; i += x)
#define Ford(i, l, r, x) for(int i = l; i >= (int)r; i -= x)
#define Fore(x, a) for(auto x: a)
#define pb push_back
#define pf push_front
#define ppb pop_back
#define ppf pop_front
#define ins insert
#define era erase
#define upb upper_bound
#define lwb lower_bound
#define all(a) a.begin(), a.end()

const db PI = acos(-1);
const ll inf = 1e18 + 1;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 5;

int n, q;
ll bit[maxn], st[maxn * 4], d[maxn], a[maxn];

ll gcd(ll a, ll b){
	if(!a) return abs(b);
	if(!b) return abs(a);
	return gcd(b, a % b);
}

ll get(int k){
	ll ret = 0;
	Ford(i, k, 1, i&-i) ret += bit[i];
	return ret + 1;
}

void upd(int k, int v){
	For(i, k, n, i&-i) bit[i] += v;
}

ll get(int id, int l, int r, int u, int v){
	if(r < u || v < l) return 0;
	if(u <= l && r <= v) return st[id];
	int m = (l + r) >> 1;
	ll L = get(id * 2, l, m, u, v);
	ll R = get(id * 2 + 1, m + 1, r, u, v);
	return gcd(L, R);
}

void upd(int id, int l, int r, int p, int v){
	if(p < l || r < p) return;
	if(l == r){
		st[id] += v;
		return;
	}
	int m = (l + r) >> 1;
	upd(id * 2, l, m, p, v);
	upd(id * 2 + 1, m + 1, r, p, v);
	st[id] = gcd(st[id * 2], st[id * 2 + 1]);
}

signed main(){
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr); cout.tie(nullptr);
	cin >> n >> q;
	For(i, 1, q, 1){
		int t, l, r; cin >> t >> l >> r;
		if(t == 1){
			int x; cin >> x;
			upd(l, x); upd(r + 1, -x);
			upd(1, 1, n, l, x);
			upd(1, 1, n, r + 1, -x);
		}else{
			cout << gcd(get(l), get(1, 1, n, l + 1, r)) << '\n';
		}
	}
	cerr << "TIME ELAPSED: " << 1.0 * clock() / CLOCKS_PER_SEC << "s.\n";
	return 0;
}