#include<bits//stdc++.h>
#include "game.h"
using namespace std;
using ll = long long;
long long GCD(long long X, long long Y) {
return(Y?GCD(Y,X%Y):X);
}
struct segment_tree{
int n;
vector<ll>seg;
void update(int i,ll x){
seg[i+=n]=x;
for(i/=2;i;i/=2)seg[i]=GCD(seg[i*2],seg[i*2+1]);
}
ll get(int l,int r){
ll ret=0;
for(l+=n,r+=n+1;l<r;l/=2,r/=2){
if(l&1)ret=GCD(ret,seg[l++]);
if(r&1)ret=GCD(ret,seg[--r]);
}
return ret;
}
};
vector<segment_tree>a;
void init(int R, int C) {
a.resize(R);
for(int i=0;i<R;++i)a[i].seg.resize(2*C),a[i].n=C;
}
void update(int P, int Q, long long K) {
a[P].update(Q,K);
}
long long calculate(int P, int Q, int U, int V) {
ll res=0;
for(int i=P;i<=U;++i){
res=GCD(res,a[i].get(Q,V));
}
return res;
}