#include<bits/stdc++.h>

#define ll                      long long int
#define RUN_CASE(t,T)           for(__typeof(t) t=1;t<=T;t++)
#define gcd(a,b)                __gcd(a,b)

using namespace std;

#define sz 100005
ll ara[sz],tree[4*sz];

void Build(ll node,ll b,ll e)
{
    if(b == e){
        tree[node] = ara[b];
        return;
    }
    ll mid = (b+e)>>1;
    Build(node<<1 , b , mid);
    Build(1+(node<<1) , mid+1 , e);
    tree[node] = gcd(tree[node<<1] , tree[1+(node<<1)]);
}
ll Query(ll node,ll b,ll e,ll i,ll j)
{
    if(e<i || b>j)
        return 0LL;
    if(b>=i && e<=j)
        return tree[node];
    ll mid = (b+e)>>1;
    ll p1 = Query(node<<1 , b , mid , i , j);
    ll p2 = Query(1+(node<<1) , mid+1 , e , i , j);
    return gcd(p1 , p2);
}
void Update(ll node,ll b,ll e,ll pos,ll val)
{
    if(e<pos || b>pos)
        return;
    if(b==pos && e==pos){
        tree[node] = val;
        return;
    }
    ll mid = (b+e)>>1;
    Update(node<<1 , b , mid , pos , val);
    Update(1+(node<<1) , mid+1 , e , pos , val);
    tree[node] = gcd(tree[node<<1] , tree[1+(node<<1)]);
}

int main()
{
    ll i,j,k,n,q,pos,l,r,cmd,val;
    cin>>n>>q;

    for(i=1 ; i<=n ; i++)
        cin>>ara[i];

    Build(1 , 1 , n);
    for(i=1 ; i<=q ; i++){
        cin>>cmd;
        if(cmd == 1){
            cin>>l>>r;
            ll ans = Query(1 , 1 , n , l , r);
            cout<<ans<<endl;
        }
        else{
            cin>>pos>>val;
            Update(1 , 1 , n , pos , val);
        }
    }
    return 0;
}