#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; typedef pair P; ll mod[3]={1000000007, 1000000009, 998244353}; ll b0[2]={314159265, 358979323}; ll powmod(ll a, ll k, ll MOD){ ll ap=a, ans=1; while(k){ if(k&1){ ans*=ap; ans%=MOD; } ap=ap*ap; ap%=MOD; k>>=1; } return ans; } ll inv(ll a, ll MOD){ return powmod(a, MOD-2, MOD); } int n; ll p[1000010]; int main() { int q; cin>>n>>q; char c[100010]; ll l[100010], r[100010], k[100010]; for(int i=1; i<=q; i++){ cin>>c[i]; if(c[i]=='!') cin>>l[i]>>r[i]>>k[i]; } int ans[100010]={}; for(int t=0; t<6; t++){ ll b=b0[t%2], MOD=mod[t%3]; ll bv=inv(b-1, MOD); p[0]=1; for(int i=1; i mp; mp[0]=0; for(int i=1; i<=q; i++){ if(c[i]=='!'){ (s+=(k[i]+MOD)*(p[r[i]]-p[l[i]]+MOD)%MOD*bv)%=MOD; if(mp.find(s)==mp.end()){ mp[s]=i; } }else{ ans[i]=max(ans[i], mp[s]); } } } for(int i=1; i<=q; i++){ if(c[i]=='?') cout<