#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,q,tree[105][305][305],color[305][305];
inline int lowbit(int x){return x&(-x);}
inline void add(int color,int x,int y,int add){
for(int i=x;i<=n;i+=lowbit(i)){
for(int j=y;j<=m;j+=lowbit(j)){
tree[color][i][j]+=add;
}
}
}
inline int query(int color,int x,int y){
int ans=0;
for(int i=x;i;i-=lowbit(i)){
for(int j=y;j;j-=lowbit(j)){
ans+=tree[color][i][j];
}
}
return ans;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&color[i][j]);
add(color[i][j],i,j,1);
}
}
scanf("%d",&q);
while(q--){
int opt;
scanf("%d",&opt);
if(opt==1){
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
add(color[x][y],x,y,-1);
color[x][y]=c;
add(color[x][y],x,y,1);
}
else if(opt==2){
int x1,x2,y1,y2,c;
scanf("%d%d%d%d%d",&x1,&x2,&y1,&y2,&c);
printf("%d\n",query(c,x2,y2)-query(c,x2,y1-1)-query(c,x1-1,y2)+query(c,x1-1,y1-1));
//注意x1,y1要减一
}
}
}