RT,qw。qwq,
#include "bits/stdc++.h"
using namespace std;
#define ll long long
const int Len = 5e5 + 5;
const ll Inf = 1e16;
inline int read()
{
int x = 0 , f = 1;
char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-') f = -1;ch = getchar();}
while('0' <= ch && ch <= '9'){x = (x << 3) + (x << 1) + ch - '0';ch = getchar();}
return x * f;
}
void write(ll x){if(x < 0){putchar('-');x = -x;}if(x > 9) write(x / 10);putchar(x % 10 + '0');}
inline void writeN(ll x){write(x) , putchar('\n');}
ll mxad[Len],mxa[Len],mxln[Len],add[Len],a[Len],mxnn[Len];
int B,L[Len],R[Len],pos[Len],sizb,pa[Len],n,m,vis[Len];
inline void push_down(int p)
{
mxa[p] = -Inf;
for(int i = L[p] ; i <= R[p] ; i ++)
{
mxln[i] = max(mxln[i] , a[i] + mxad[p]);
a[i] = a[i] + add[p];
}
add[p] = mxad[p] = vis[p] = 0;
}
inline bool cmp(int x,int y){return a[x] < a[y];}
inline void upd(int p,int l,int r,int x)
{
if(vis[p]) push_down(p);
for(int i = l ; i <= r ; i ++)
{
a[i] += x;
mxln[i] = max(mxln[i] , a[i]);
}
sort(pa + L[p] , pa + R[p] + 1 , cmp);
mxnn[L[p]] = mxln[pa[L[p]]] , mxa[L[p]] = a[pa[L[p]]];int id = 0;
for(int i = L[p] + 1 ; i <= R[p] ; i ++)
{
id = pa[i];
mxnn[i] = max(mxnn[i - 1] , mxln[id]);
mxa[i] = max(mxa[i - 1] , a[id]);
}
}
inline void Upd(int l,int r,int x)
{
int pl = pos[l] , pr = pos[r];
upd(pl , l , R[pl] , x);
for(int p = pl + 1 ; p <= pr - 1 ; p ++)
{
add[p] += x;
mxad[p] = max(mxad[p] , add[p]);
vis[p] = 1;
}
upd(pr , L[pr] , r , x);
}
inline ll qry(int l,int r,int x)
{
ll ans = -Inf;
int pl = pos[l] , pr = pos[r];
if(pl == pr)
{
if(vis[pl]) push_down(pl);
for(int i = l ; i <= r ; i ++) if(a[i] < x) ans = max(ans , mxln[i]);
return ans;
}
if(vis[pl]) push_down(pl);
for(int i = l ; i <= R[pl] ; i ++) if(a[i] < x) ans = max(ans , mxln[i]);
int id = 0;
for(int p = pl + 1 ; p <= pr - 1 ; p ++)
{
id = lower_bound(pa + L[p] , pa + R[p] + 1 , x - add[p] , cmp) - pa - 1;
if(id >= L[p]) ans = max(ans , max(mxnn[id] , mxa[id] + mxad[p]));
}
if(vis[pr]) push_down(pr);
for(int i = L[pr] ; i <= r ; i ++) if(a[i] < x) ans = max(ans , mxln[i]);
return ans;
}
inline void init(){for(int i = 1 ; i <= n ; i ++) pa[i] = i , mxln[i] = -Inf;for(int i = 1 ; i <= sizb ; i ++) vis[i] = add[i] = 0 , mxad[i] = -Inf;}
signed main()
{
//freopen("1.in","r",stdin);
//freopen("1.out","w",stdout);
n = read() , m = read();B = sqrt(n);sizb = max(1 , n / B);init();
for(int i = 1 ; i <= n ; i ++) a[i] = read();
for(int i = 1 ; i <= sizb ; i ++)
{
L[i] = (i - 1) * B + 1;
R[i] = i * B;
}
if(R[sizb] < n)
{
sizb ++;
L[sizb] = R[sizb - 1] + 1;
R[sizb] = n;
}
for(int i = 1 ; i <= sizb ; i ++) upd(i , L[i] , R[i] , 0);
int o,l,r,x;
for(int i = 1 ; i <= m ; i ++)
{
o = read() , l = read() , r = read() , x = read();
if(o == 1) Upd(l , r , x);
else
{
ll res = qry(l , r , x);
if(res <= -Inf) puts("-inf");
else writeN(res);
}
}
return 0;
}