#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stdlib.h>
#define ll long long
using namespace std;
int n,t,a[100000],ans,o,anss;
struct node{
int l;
int r;
int sum;
}tree[900005];
inline void build(int i,int l,int r)
{
tree[i].l=l,tree[i].r=r;
if(l==r)
{
tree[i].sum=a[l];
return;
}
int mid=(l+r)>>1;
build(i<<1,l,mid);
build(i<<1|1,mid+1,r);
}
inline void add(int i,int dis,int k)
{
if(tree[i].l==tree[i].r)
{
tree[i].sum=k;
return ;
}
if(dis<=tree[i*2].r)
{
add(i*2,dis,k);
}
else
{
add(i*2+1,dis,k);
}
tree[i].sum=tree[i*2].sum+tree[i*2+1].sum;
return ;
}
int main()
{
scanf("%d%d",&n,&t);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
build(1,1,n);
int k,l,r;
for(int i=1;i<=t;i++)
{
scanf("%d%d%d",&k,&l,&r);
if(k==1)
{
// add(1,l,r);
a[l]=r;
}
else
{
if(r-l>60)
{
printf("Too large\n");
continue;
}
anss=1;
for(int i=1;i<=n;i++)
{
if(a[i]<0)
{
o++;
}
anss*=a[i];
}
if(o%2==0)
{
if(anss<=1073741824)
printf("%d\n",anss);
else
printf("Too large\n");
}
else
{
o=anss;
for(int i=1;i<=n;i++)
{
if(a[i]>0)
{
anss*=a[i];
}
else
{
continue;
}
}
for(int i=n;i>=1;i--)
{
if(a[i]>0)
{
ans*=a[i];
}
else
{
continue;
}
}
ans=o/ans;
anss=o/anss;
if(ans>anss&&ans<=1073741824&&ans>0)
{
printf("%d\n",ans);
continue;
}
if(ans<anss&&anss<=1073741824&&anss>0)
{
printf("%d\n",anss);
continue;
}
printf("Too large\n");
}
}
}
return 0;
}
```CPP