1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 #include<algorithm>
5 using namespace std;
6 int s,n;
7 int op;
8 const int maxn=2e6+10;
9 int c[maxn];
10 struct SS
11 {
12 int lowbit(int x)
13 {
14 return x&(-x);
15 }
16 void add(int x,int w)
17 {
18 for(;x<=n;x+=lowbit(x))
19 {
20 c[x]+=w;
21 }
22 }
23 int sum(int x)
24 {
25 int res=0;
26 for(;x;x-=lowbit(x))
27 {
28 res+=c[x];
29 }
30 return res;
31 }
32 }XX;
33 int ans[maxn];
34
35 struct node
36 {
37 int id;
38 int op;
39 int x1,x2,y1,y2;
40 bool operator <(const node &x)const
41 {
42 if(x1==x.x1)
43 {
44 return op<x.op;
45 }
46 return x1<x.x1;
47 }
48 }way[maxn],a[maxn];
49 void cdq(int l,int r)
50 {
51 if(l==r)
52 {
53 return ;
54 }
55 int mid=(l+r)>>1;
56 cdq(l,mid);
57 cdq(mid+1,r);
58 int cnt=0;
59 for(int i=l;i<=mid;i++)
60 {
61 if(way[i].op==1)
62 {
63 a[cnt++]=way[i];
64 }
65 }
66 for(int i=mid+1;i<=r;i++)
67 {
68 if(way[i].op==2)
69 {
70 a[cnt++]=way[i];
71 a[cnt-1].op=0;
72 a[cnt++]=way[i];
73 a[cnt-1].op=2;
74 a[cnt-1].x1=way[i].x2;
75 }
76 }
77 sort(a,a+cnt);
78 for(int i=0;i<cnt;i++)
79 {
80 if(a[i].op==0)
81 {
82 ans[a[i].id]-=(XX.sum(a[i].y2)-XX.sum(a[i].y1-1));
83 }
84 else
85 if(a[i].op==1)
86 {
87 XX.add(a[i].y1,a[i].x2);
88 }
89 else
90 {
91 ans[a[i].id]+=(XX.sum(a[i].y2)-XX.sum(a[i].y1-1));
92 }
93 }
94 }
95 inline int read()
96 {
97 int x=0,f=1;
98 char ch=getchar();
99 while(isdigit(ch)==0 && ch!='-')ch=getchar();
100 if(ch=='-')f=-1,ch=getchar();
101 while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
102 return x*f;
103 }
104 int main()
105 {
106 memset(c,0,sizeof(c));
107 memset(ans,0,sizeof(ans));
108 s=read();
109 n=read();
110 int cnt=0;
111 int tot=0;
112 while(scanf("%d",&op)&&op!=3)
113 {
114 if(op==1)
115 {
116 int x,y,z;
117 x=read();
118 y=read();
119 z=read();
120 way[++cnt].op=op;
121 way[cnt].id=-1;
122 way[cnt].x1=x;
123 way[cnt].y1=y;
124 way[cnt].x2=z;
125 way[cnt].y2=0;
126
127 }
128 if(op==2)
129 {
130 int x1,x2,y1,y2;
131 x1=read();
132 y1=read();
133 x2=read();
134 y2=read();
135 way[++cnt].op=op;
136 way[cnt].id=++tot;
137 way[cnt].x1=x1;
138 way[cnt].x2=x2;
139 way[cnt].y1=y1;
140 way[cnt].y2=y2;
141 }
142 }
143 cdq(1,cnt);
144 for(int i=1;i<=tot;i++)
145 {
146 printf("%d\n",ans[i]);
147 //cout<<ans[i]<<endl;
148 }
149 return 0;
150 }