//Lib
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<queue>
#include<stack>
#include<set>
#include<map>
using namespace std;
//Macro
#define rep(i,a,b) for(int i=a,tt=b;i<=tt;++i)
#define drep(i,a,b) for(int i=a,tt=b;i>=tt;--i)
#define erep(i,e,x) for(int i=x;i;i=e[i].next)
#define irep(i,x) for(__typeof(x.begin()) i=x.begin();i!=x.end();i++)
#define read() (strtol(ipos,&ipos,10))
#define sqr(x) ((x)*(x))
#define pb push_back
#define PS system("pause");
typedef long long ll;
typedef pair<int,int> pii;
const int oo=~0U>>1;
const double inf=1e100;
const double eps=1e-6;
string name="", in=".in", out=".out";
//Var
struct info
{
int m,lm,rm,sum,size;
info():size(1){}
void set(bool x){m=lm=rm=sum=x?size:0;}
const bool full()const{return size==sum;}
friend info operator +(const info &a,const info &b)
{
info c;
c.size=a.size+b.size;
c.sum=a.sum+b.sum;
c.lm=a.full()?a.sum+b.lm:a.lm;
c.rm=b.full()?b.sum+a.rm:b.rm;
c.m=max(max(a.m,b.m),a.rm+b.lm);
return c;
}
};
struct T
{
#define lc(x) (x<<1)
#define rc(x) (x<<1^1)
info c[2];bool exist;
T(bool f=true):exist(f){}
void set(bool color){rep(i,0,1)c[i].set(i==color);}
friend T operator +(const T &a,const T &b)
{
if(!a.exist)return b;if(!b.exist)return a;
T c;rep(i,0,1)c.c[i]=a.c[i]+b.c[i];
return c;
}
}tree[262145];
int num[100008],flag[262145],n,m;
void Set(int root,int delta)
{
if(delta==3){swap(tree[root].c[0],tree[root].c[1]);flag[root]=3-flag[root];}
else{tree[root].set(delta-1);flag[root]=delta;}
}
void Push_Down(int root)
{
if(flag[root])Set(lc(root),flag[root]),Set(rc(root),flag[root]),flag[root]=0;
}
void Change(int root,int l,int r,int a,int b,int delta)
{
if(a>r||b<l)return;
if(a<=l&&r<=b){Set(root,delta);return;}
Push_Down(root);
Change(lc(root),l,l+r>>1,a,b,delta);Change(rc(root),(l+r>>1)+1,r,a,b,delta);
tree[root]=tree[lc(root)]+tree[rc(root)];
}
T Get(int root,int l,int r,int a,int b)
{
if(a>r||b<l)return T(false);
if(a<=l&&r<=b)return tree[root];
Push_Down(root);
return Get(lc(root),l,l+r>>1,a,b)+Get(rc(root),(l+r>>1)+1,r,a,b);
}
void Build(int root,int l,int r)
{
if(l==r){tree[root].set(num[l]);return;}
Build(lc(root),l,l+r>>1);
Build(rc(root),(l+r>>1)+1,r);
tree[root]=tree[lc(root)]+tree[rc(root)];
}
void Work()
{
int o,a,b;
scanf("%d%d",&n,&m);
rep(i,1,n)scanf("%d",num+i);
Build(1,1,n);
rep(i,1,m)
{
scanf("%d%d%d",&o,&a,&b);a++;b++;
switch(o)
{
case 0:Change(1,1,n,a,b,1);break;
case 1:Change(1,1,n,a,b,2);break;
case 2:Change(1,1,n,a,b,3);break;
case 3:printf("%d\n",Get(1,1,n,a,b).c[1].sum);break;
case 4:printf("%d\n",Get(1,1,n,a,b).c[1].m);break;
}
}
}
int main()
{
// freopen((name+in).c_str(),"r",stdin);
// freopen((name+out).c_str(),"w",stdout);
// Init();
Work();
return 0;
}
Ly9MaWIKI2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTxjc3RyaW5nPgojaW5jbHVkZTxjc3RkbGliPgojaW5jbHVkZTxjbWF0aD4KI2luY2x1ZGU8Y3RpbWU+CiAKI2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGFsZ29yaXRobT4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxzdHJpbmc+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxzdGFjaz4KI2luY2x1ZGU8c2V0PgojaW5jbHVkZTxtYXA+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vTWFjcm8KI2RlZmluZSByZXAoaSxhLGIpICBmb3IoaW50IGk9YSx0dD1iO2k8PXR0OysraSkKI2RlZmluZSBkcmVwKGksYSxiKSBmb3IoaW50IGk9YSx0dD1iO2k+PXR0Oy0taSkKI2RlZmluZSBlcmVwKGksZSx4KSBmb3IoaW50IGk9eDtpO2k9ZVtpXS5uZXh0KQojZGVmaW5lIGlyZXAoaSx4KSAgIGZvcihfX3R5cGVvZih4LmJlZ2luKCkpIGk9eC5iZWdpbigpO2khPXguZW5kKCk7aSsrKQojZGVmaW5lIHJlYWQoKSAgKHN0cnRvbChpcG9zLCZpcG9zLDEwKSkKI2RlZmluZSBzcXIoeCkgICgoeCkqKHgpKQojZGVmaW5lIHBiICBwdXNoX2JhY2sKI2RlZmluZSBQUyAgc3lzdGVtKCJwYXVzZSIpOwp0eXBlZGVmIGxvbmcgbG9uZyAgIGxsOwp0eXBlZGVmIHBhaXI8aW50LGludD4gcGlpOwpjb25zdCBpbnQgb289fjBVPj4xOwpjb25zdCBkb3VibGUgaW5mPTFlMTAwOwpjb25zdCBkb3VibGUgZXBzPTFlLTY7CnN0cmluZyBuYW1lPSIiLCBpbj0iLmluIiwgb3V0PSIub3V0IjsKLy9WYXIKc3RydWN0IGluZm8KewogICAgaW50IG0sbG0scm0sc3VtLHNpemU7CiAgICBpbmZvKCk6c2l6ZSgxKXt9CiAgICB2b2lkIHNldChib29sIHgpe209bG09cm09c3VtPXg/c2l6ZTowO30KICAgIGNvbnN0IGJvb2wgZnVsbCgpY29uc3R7cmV0dXJuIHNpemU9PXN1bTt9CiAgICBmcmllbmQgaW5mbyBvcGVyYXRvciArKGNvbnN0IGluZm8gJmEsY29uc3QgaW5mbyAmYikKICAgIHsKICAgICAgICBpbmZvIGM7CiAgICAgICAgYy5zaXplPWEuc2l6ZStiLnNpemU7CiAgICAgICAgYy5zdW09YS5zdW0rYi5zdW07CiAgICAgICAgYy5sbT1hLmZ1bGwoKT9hLnN1bStiLmxtOmEubG07CiAgICAgICAgYy5ybT1iLmZ1bGwoKT9iLnN1bSthLnJtOmIucm07CiAgICAgICAgYy5tPW1heChtYXgoYS5tLGIubSksYS5ybStiLmxtKTsKICAgICAgICByZXR1cm4gYzsKICAgIH0KfTsKc3RydWN0IFQKewogICAgI2RlZmluZSBsYyh4KSAgICh4PDwxKQogICAgI2RlZmluZSByYyh4KSAgICh4PDwxXjEpCiAgICBpbmZvIGNbMl07Ym9vbCBleGlzdDsKICAgIFQoYm9vbCBmPXRydWUpOmV4aXN0KGYpe30KICAgIHZvaWQgc2V0KGJvb2wgY29sb3Ipe3JlcChpLDAsMSljW2ldLnNldChpPT1jb2xvcik7fQogICAgZnJpZW5kIFQgb3BlcmF0b3IgKyhjb25zdCBUICZhLGNvbnN0IFQgJmIpCiAgICB7CiAgICAgICAgaWYoIWEuZXhpc3QpcmV0dXJuIGI7aWYoIWIuZXhpc3QpcmV0dXJuIGE7CiAgICAgICAgVCBjO3JlcChpLDAsMSljLmNbaV09YS5jW2ldK2IuY1tpXTsKICAgICAgICByZXR1cm4gYzsKICAgIH0KfXRyZWVbMjYyMTQ1XTsKaW50IG51bVsxMDAwMDhdLGZsYWdbMjYyMTQ1XSxuLG07CnZvaWQgU2V0KGludCByb290LGludCBkZWx0YSkKewogICAgaWYoZGVsdGE9PTMpe3N3YXAodHJlZVtyb290XS5jWzBdLHRyZWVbcm9vdF0uY1sxXSk7ZmxhZ1tyb290XT0zLWZsYWdbcm9vdF07fQogICAgZWxzZXt0cmVlW3Jvb3RdLnNldChkZWx0YS0xKTtmbGFnW3Jvb3RdPWRlbHRhO30KfQp2b2lkIFB1c2hfRG93bihpbnQgcm9vdCkKewogICAgaWYoZmxhZ1tyb290XSlTZXQobGMocm9vdCksZmxhZ1tyb290XSksU2V0KHJjKHJvb3QpLGZsYWdbcm9vdF0pLGZsYWdbcm9vdF09MDsKfQp2b2lkIENoYW5nZShpbnQgcm9vdCxpbnQgbCxpbnQgcixpbnQgYSxpbnQgYixpbnQgZGVsdGEpCnsKICAgIGlmKGE+cnx8YjxsKXJldHVybjsKICAgIGlmKGE8PWwmJnI8PWIpe1NldChyb290LGRlbHRhKTtyZXR1cm47fQogICAgUHVzaF9Eb3duKHJvb3QpOwogICAgQ2hhbmdlKGxjKHJvb3QpLGwsbCtyPj4xLGEsYixkZWx0YSk7Q2hhbmdlKHJjKHJvb3QpLChsK3I+PjEpKzEscixhLGIsZGVsdGEpOwogICAgdHJlZVtyb290XT10cmVlW2xjKHJvb3QpXSt0cmVlW3JjKHJvb3QpXTsKfQpUIEdldChpbnQgcm9vdCxpbnQgbCxpbnQgcixpbnQgYSxpbnQgYikKewogICAgaWYoYT5yfHxiPGwpcmV0dXJuIFQoZmFsc2UpOwogICAgaWYoYTw9bCYmcjw9YilyZXR1cm4gdHJlZVtyb290XTsKICAgIFB1c2hfRG93bihyb290KTsKICAgIHJldHVybiBHZXQobGMocm9vdCksbCxsK3I+PjEsYSxiKStHZXQocmMocm9vdCksKGwrcj4+MSkrMSxyLGEsYik7Cn0Kdm9pZCBCdWlsZChpbnQgcm9vdCxpbnQgbCxpbnQgcikKewogICAgaWYobD09cil7dHJlZVtyb290XS5zZXQobnVtW2xdKTtyZXR1cm47fQogICAgQnVpbGQobGMocm9vdCksbCxsK3I+PjEpOwogICAgQnVpbGQocmMocm9vdCksKGwrcj4+MSkrMSxyKTsKICAgIHRyZWVbcm9vdF09dHJlZVtsYyhyb290KV0rdHJlZVtyYyhyb290KV07Cn0Kdm9pZCBXb3JrKCkKewogICAgaW50IG8sYSxiOwogICAgc2NhbmYoIiVkJWQiLCZuLCZtKTsKICAgIHJlcChpLDEsbilzY2FuZigiJWQiLG51bStpKTsKICAgIEJ1aWxkKDEsMSxuKTsKICAgIHJlcChpLDEsbSkKICAgIHsKICAgICAgICBzY2FuZigiJWQlZCVkIiwmbywmYSwmYik7YSsrO2IrKzsKICAgICAgICBzd2l0Y2gobykKICAgICAgICB7CiAgICAgICAgICAgIGNhc2UgMDpDaGFuZ2UoMSwxLG4sYSxiLDEpO2JyZWFrOwogICAgICAgICAgICBjYXNlIDE6Q2hhbmdlKDEsMSxuLGEsYiwyKTticmVhazsKICAgICAgICAgICAgY2FzZSAyOkNoYW5nZSgxLDEsbixhLGIsMyk7YnJlYWs7CiAgICAgICAgICAgIGNhc2UgMzpwcmludGYoIiVkXG4iLEdldCgxLDEsbixhLGIpLmNbMV0uc3VtKTticmVhazsKICAgICAgICAgICAgY2FzZSA0OnByaW50ZigiJWRcbiIsR2V0KDEsMSxuLGEsYikuY1sxXS5tKTticmVhazsKICAgICAgICB9CiAgICB9Cn0KaW50IG1haW4oKQp7Ci8vICBmcmVvcGVuKChuYW1lK2luKS5jX3N0cigpLCJyIixzdGRpbik7Ci8vICBmcmVvcGVuKChuYW1lK291dCkuY19zdHIoKSwidyIsc3Rkb3V0KTsKLy8gIEluaXQoKTsKICAgIFdvcmsoKTsKICAgIHJldHVybiAwOwp9