RT。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int N = 200010, INF = 1e9;
int n, q;
ll a[N], f[N];
ll dp(int l, int r)
{
ll ans = -INF;
int cnt = 0;
f[l - 1] = 1;
for(int i = l; i <= r; i ++)
if(a[i] < 0) cnt ++;
if(cnt % 2)
for(int i = l; i <= r; i ++)
{
if(ans > pow(2, 30)) break;
f[i] = max(f[i - 1] * a[i], a[i]);
ans = max(ans, f[i]);
}
else
{
ans = 1;
for(int i = l; i <= r; i ++)
ans *= a[i];
}
return ans;
}
int main()
{
scanf("%d%d", &n, &q);
for(int i = 1; i <= n; i ++) scanf("%lld", &a[i]);
for(int i = 1; i <= n; i ++) f[i] = a[i];
int num, l, r;
while (q --)
{
scanf("%d%d%d", &num, &l, &r);
if(num == 1) a[l] = r;
else if(num == 2)
{
ll t = dp(l, r);
if(l == r)
{
if(t < 1) puts("1");
else printf("%lld\n", t);
}
else
{
if(t <= pow(2, 30)) printf("%lld\n", t);
else puts("Too large");
}
}
}
return 0;
}