#include<bits/stdc++.h>
#define int long long
#define ls(x) ((x)*2)
#define rs(x) ((x)*2+1)
#define Debug(...) fprintf(stderr, __VA_ARGS__)
#define For(i,a,b) for(int i=a,i##end=b;i<=i##end;i++)
#define Rof(i,a,b) for(int i=a,i##end=b;i>=i##end;i--)
#define rep(i, b) for(int i=1,i##end=b;i<=i##end;i++)
using namespace std;
const int N=5e4+5;
inline void chmx(int &x,int y){(x<y)&&(x=y);}
inline void chmn(int &x,int y){(x>y)&&(x=y);}
inline int read(){
int f=0,x=0;
char ch=getchar();
while(!isdigit(ch)){f|=(ch=='-');ch=getchar();}
while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return f?-x:x;
}
int n,q,B;
int L[N],R[N],kuai[N];
int a[N],b[N];
int minx[N],maxx[N];
int tag[N],mn[305][N];
vector<int>divs[N];
inline void init(){
for(int i=1;i<N;i++)
for(int j=i;j<N;j+=i)
divs[j].emplace_back(i);
}
inline int calc(int x,int y){if(x==0||y==0) return 1e16;return x/__gcd(x,y)*y/__gcd(x,y);}
signed main(){
n=read(),q=read();
B=sqrt(n);
for(int i=1;i<=n;i++) a[i]=read();
for(int i=1;i<=n;i++) b[i]=read();
int num=B;
b[0]=1e16;
for(int i=1;i<=B;i++){
L[i]=(i-1)*B+1,R[i]=i*B;
tag[i]=-1;
minx[i]=1e16;
maxx[i]=1e16;
for(int j=L[i];j<=R[i];j++){
kuai[j]=i;
chmn(minx[i],calc(a[j],b[j]));
chmn(maxx[i],b[j]);
}
}
if(num*B<n){
num++;
L[num]=(num-1)*B+1;
R[num]=n;
tag[num]=-1;
minx[num]=1e16;
maxx[num]=1e16;
for(int j=L[num];j<=R[num];j++){
kuai[j]=num;
chmn(minx[num],calc(a[j],b[j]));
chmn(maxx[num],b[j]);
}
}
init();
for(int i=0;i<=num;i++){
for(int j=0;j<N;j++) mn[i][j]=1e16;
}
for(int i=1;i<=n;i++){
int x=b[i];
for(auto v:divs[x]){
for(int k=v;k<N;k+=v)
chmn(mn[kuai[i]][k],calc(k,x));
}
}
while(q--){
int op=read();
if(op==1){
int l=read(),r=read(),x=read();
if(kuai[l]==kuai[r]){
minx[kuai[l]]=1e16;
if(tag[kuai[l]]!=-1)for(int i=L[kuai[l]];i<=R[kuai[l]];i++) a[i]=tag[kuai[l]];
tag[kuai[l]]=-1;
for(int i=l;i<=r;i++) a[i]=x;
for(int i=L[kuai[l]];i<=R[kuai[l]];i++){
chmn(minx[kuai[l]],calc(a[i],b[i]));
}
}
else{
minx[kuai[l]]=1e16;
if(tag[kuai[l]]!=-1)for(int i=L[kuai[l]];i<=R[kuai[l]];i++) a[i]=tag[kuai[l]];
tag[kuai[l]]=-1;
for(int i=l;i<=R[kuai[l]];i++)a[i]=x;
for(int i=L[kuai[l]];i<=R[kuai[l]];i++)
chmn(minx[kuai[l]],calc(a[i],b[i]));
minx[kuai[r]]=1e16;
if(tag[kuai[r]]!=-1)for(int i=L[kuai[r]];i<=R[kuai[r]];i++) a[i]=tag[kuai[r]];
tag[kuai[r]]=-1;
for(int i=L[kuai[r]];i<=r;i++)a[i]=x;
for(int i=L[kuai[r]];i<=R[kuai[r]];i++)
chmn(minx[kuai[r]],calc(a[i],b[i]));
for(int i=kuai[l]+1;i<kuai[r];i++) tag[i]=x;
}
}
else{
int l=read(),r=read();
int ans=1e16;
if(kuai[l]==kuai[r]){
for(int i=l;i<=r;i++){
if(tag[kuai[l]]==-1)ans=min(ans,calc(a[i],b[i]));
else ans=min(ans,calc(tag[kuai[l]],b[i]));
}
}
else{
for(int i=l;i<=R[kuai[l]];i++){
if(tag[kuai[l]]==-1)ans=min(ans,calc(a[i],b[i]));
else ans=min(ans,calc(tag[kuai[l]],b[i]));
}
for(int i=L[kuai[r]];i<=r;i++){
if(tag[kuai[r]]==-1)ans=min(ans,calc(a[i],b[i]));
else ans=min(ans,calc(tag[kuai[r]],b[i]));
}
for(int i=kuai[l]+1;i<kuai[r];i++){
if(tag[i]!=-1){
if(mn[i][tag[i]]<=N)ans=min(ans,mn[i][tag[i]]);
else ans=min(ans,calc(tag[i],maxx[i]));
}
else{
ans=min(ans,minx[i]);
}
}
}
printf("%lld\n",ans);
}
}
#ifdef LOCAL
Debug("\nMy Time: %.3lfms\n", (double)clock() / CLOCKS_PER_SEC);
#endif
return 0;
}