#include <bits/stdc++.h>
using namespace std;
#define all(ac) ac.begin(),ac.end()
#define task "tet"
#define fi first
#define se second
#define pii pair<int,int>
#define db long double
#define int long long
#define pb push_back
#define eb emplace_back
 
const int N = 505;
int n, m, a[N][N], q;
int MOD;
 
struct node {
    int mx, mn;
    node(int mx = -1e18, int mn = 1e18): mx(mx), mn(mn) {}
};
 
struct segtree {
    int n;
    vector <node> tree;
 
    segtree(int n): n(n), tree(n << 2 | 1, node()) {}
 
    node Merge(node a, node b) {
        node res;
        res.mx = max(a.mx, b.mx);
        res.mn = min(a.mn, b.mn);
        return res;
    }
 
    void update(int id, int l, int r, int pos, int w) {
        if(l > pos || r < pos) return;
        if(l == r) {
            if(w == -1) tree[id] = node();
            else {
                tree[id].mx = w;
                tree[id].mn = w;
            }
            return;
        }
 
        int mid = (l + r) >> 1;
        update(id << 1, l, mid, pos, w);
        update(id << 1 | 1, mid + 1, r, pos, w);
        tree[id] = Merge(tree[id << 1], tree[id << 1 | 1]);
        return;
    }
 
    node get(int id, int l, int r, int u, int v) {
        if(l > v || r < u) return node();
        if(l >= u && r <= v) return tree[id];
 
        int mid = (l + r) >> 1;
        return Merge(get(id << 1, l, mid, u, v), get(id << 1 | 1, mid + 1, r, u, v));
    }
 
    void update(int pos, int w) {
        return update(1, 0, n - 1, pos, w), void();
    }
 
    node get(int l, int r) {
        return get(1, 0, n - 1, l, r);
    }
} Row(N * N), Col(N * N);
 
int32_t main() {
    if(fopen(task".inp", "r")) {
        freopen(task".inp", "r", stdin);
        freopen(task".out", "w", stdout);
    }
 
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
 
    cin >> n >> m;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            cin >> a[i][j];
            Row.update(a[i][j], i);
            Col.update(a[i][j], j);
        }
    }
    MOD = n * m;
 
    cin >> q;
    int w = 0;
    while(q--) {
        int type; cin >> type;
        if(type == 1) {
            int r1, c1, r2, c2; cin >> r1 >> c1 >> r2 >> c2;
            Row.update(a[r1][c1], r2);
            Row.update(a[r2][c2], r1);
            Col.update(a[r1][c1], c2);
            Col.update(a[r2][c2], c1);
            swap(a[r1][c1], a[r2][c2]);
        }
        else
        if(type == 2) {
            int ww; cin >> ww;
            w = (w + ww) % MOD;
        }
        else {
            int r1, c1, r2, c2; cin >> r1 >> c1 >> r2 >> c2;
            if(r1 == 1 && c1 == 1 && r2 == n && c2 == m) {
                cout << "-1\n";
                continue;
            }
 
            int ans = -1;
            if(w != 0) {
                int p = MOD - w;
                int lo = 0, hi = w - 1;
                while(lo <= hi) {
                    int mid = (lo + hi) >> 1;
                    node val_row = Row.get(p, p + mid);
                    node val_col = Col.get(p, p + mid);
                    if(val_row.mx > r2 || val_row.mn < r1 || val_col.mx > c2 || val_col.mn < c1) {
                        ans = mid;
                        hi = mid - 1;
                    }
                    else lo = mid + 1;
                }
            }
            if(ans != -1) {
                cout << ans << '\n';
                continue;
            }
            int lo = w, hi = MOD - 1;
            while(lo <= hi) {
                int mid = (lo + hi) >> 1;
                node val_row = Row.get(0, mid - w);
                node val_col = Col.get(0, mid - w);
                if(val_row.mx > r2 || val_row.mn < r1 || val_col.mx > c2 || val_col.mn < c1) {
                    ans = mid;
                    hi = mid - 1;
                }
                else lo = mid + 1;
            }
            cout << ans << '\n';
        }
    }
    return 0;
}
				I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgYWxsKGFjKSBhYy5iZWdpbigpLGFjLmVuZCgpCiNkZWZpbmUgdGFzayAidGV0IgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBkYiBsb25nIGRvdWJsZQojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBlYiBlbXBsYWNlX2JhY2sKCmNvbnN0IGludCBOID0gNTA1OwppbnQgbiwgbSwgYVtOXVtOXSwgcTsKaW50IE1PRDsKCnN0cnVjdCBub2RlIHsKICAgIGludCBteCwgbW47CiAgICBub2RlKGludCBteCA9IC0xZTE4LCBpbnQgbW4gPSAxZTE4KTogbXgobXgpLCBtbihtbikge30KfTsKCnN0cnVjdCBzZWd0cmVlIHsKICAgIGludCBuOwogICAgdmVjdG9yIDxub2RlPiB0cmVlOwogICAgCiAgICBzZWd0cmVlKGludCBuKTogbihuKSwgdHJlZShuIDw8IDIgfCAxLCBub2RlKCkpIHt9CiAgICAKICAgIG5vZGUgTWVyZ2Uobm9kZSBhLCBub2RlIGIpIHsKICAgICAgICBub2RlIHJlczsKICAgICAgICByZXMubXggPSBtYXgoYS5teCwgYi5teCk7CiAgICAgICAgcmVzLm1uID0gbWluKGEubW4sIGIubW4pOwogICAgICAgIHJldHVybiByZXM7CiAgICB9CiAgICAKICAgIHZvaWQgdXBkYXRlKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgcG9zLCBpbnQgdykgewogICAgICAgIGlmKGwgPiBwb3MgfHwgciA8IHBvcykgcmV0dXJuOwogICAgICAgIGlmKGwgPT0gcikgewogICAgICAgICAgICBpZih3ID09IC0xKSB0cmVlW2lkXSA9IG5vZGUoKTsKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0cmVlW2lkXS5teCA9IHc7CiAgICAgICAgICAgICAgICB0cmVlW2lkXS5tbiA9IHc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOwogICAgICAgIHVwZGF0ZShpZCA8PCAxLCBsLCBtaWQsIHBvcywgdyk7CiAgICAgICAgdXBkYXRlKGlkIDw8IDEgfCAxLCBtaWQgKyAxLCByLCBwb3MsIHcpOwogICAgICAgIHRyZWVbaWRdID0gTWVyZ2UodHJlZVtpZCA8PCAxXSwgdHJlZVtpZCA8PCAxIHwgMV0pOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIAogICAgbm9kZSBnZXQoaW50IGlkLCBpbnQgbCwgaW50IHIsIGludCB1LCBpbnQgdikgewogICAgICAgIGlmKGwgPiB2IHx8IHIgPCB1KSByZXR1cm4gbm9kZSgpOwogICAgICAgIGlmKGwgPj0gdSAmJiByIDw9IHYpIHJldHVybiB0cmVlW2lkXTsKICAgICAgICAKICAgICAgICBpbnQgbWlkID0gKGwgKyByKSA+PiAxOwogICAgICAgIHJldHVybiBNZXJnZShnZXQoaWQgPDwgMSwgbCwgbWlkLCB1LCB2KSwgZ2V0KGlkIDw8IDEgfCAxLCBtaWQgKyAxLCByLCB1LCB2KSk7CiAgICB9CiAgICAKICAgIHZvaWQgdXBkYXRlKGludCBwb3MsIGludCB3KSB7CiAgICAgICAgcmV0dXJuIHVwZGF0ZSgxLCAwLCBuIC0gMSwgcG9zLCB3KSwgdm9pZCgpOwogICAgfQogICAgCiAgICBub2RlIGdldChpbnQgbCwgaW50IHIpIHsKICAgICAgICByZXR1cm4gZ2V0KDEsIDAsIG4gLSAxLCBsLCByKTsKICAgIH0KfSBSb3coTiAqIE4pLCBDb2woTiAqIE4pOwoKaW50MzJfdCBtYWluKCkgewogICAgaWYoZm9wZW4odGFzayIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4odGFzayIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3Blbih0YXNrIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKSwgY291dC50aWUoMCk7CiAgICAKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgewogICAgICAgIGZvcihpbnQgaj0xO2o8PW07aisrKSB7CiAgICAgICAgICAgIGNpbiA+PiBhW2ldW2pdOwogICAgICAgICAgICBSb3cudXBkYXRlKGFbaV1bal0sIGkpOwogICAgICAgICAgICBDb2wudXBkYXRlKGFbaV1bal0sIGopOwogICAgICAgIH0KICAgIH0KICAgIE1PRCA9IG4gKiBtOwogICAgCiAgICBjaW4gPj4gcTsKICAgIGludCB3ID0gMDsKICAgIHdoaWxlKHEtLSkgewogICAgICAgIGludCB0eXBlOyBjaW4gPj4gdHlwZTsKICAgICAgICBpZih0eXBlID09IDEpIHsKICAgICAgICAgICAgaW50IHIxLCBjMSwgcjIsIGMyOyBjaW4gPj4gcjEgPj4gYzEgPj4gcjIgPj4gYzI7CiAgICAgICAgICAgIFJvdy51cGRhdGUoYVtyMV1bYzFdLCByMik7CiAgICAgICAgICAgIFJvdy51cGRhdGUoYVtyMl1bYzJdLCByMSk7CiAgICAgICAgICAgIENvbC51cGRhdGUoYVtyMV1bYzFdLCBjMik7CiAgICAgICAgICAgIENvbC51cGRhdGUoYVtyMl1bYzJdLCBjMSk7CiAgICAgICAgICAgIHN3YXAoYVtyMV1bYzFdLCBhW3IyXVtjMl0pOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgaWYodHlwZSA9PSAyKSB7CiAgICAgICAgICAgIGludCB3dzsgY2luID4+IHd3OwogICAgICAgICAgICB3ID0gKHcgKyB3dykgJSBNT0Q7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpbnQgcjEsIGMxLCByMiwgYzI7IGNpbiA+PiByMSA+PiBjMSA+PiByMiA+PiBjMjsKICAgICAgICAgICAgaWYocjEgPT0gMSAmJiBjMSA9PSAxICYmIHIyID09IG4gJiYgYzIgPT0gbSkgewogICAgICAgICAgICAgICAgY291dCA8PCAiLTFcbiI7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaW50IGFucyA9IC0xOwogICAgICAgICAgICBpZih3ICE9IDApIHsKICAgICAgICAgICAgICAgIGludCBwID0gTU9EIC0gdzsKICAgICAgICAgICAgICAgIGludCBsbyA9IDAsIGhpID0gdyAtIDE7CiAgICAgICAgICAgICAgICB3aGlsZShsbyA8PSBoaSkgewogICAgICAgICAgICAgICAgICAgIGludCBtaWQgPSAobG8gKyBoaSkgPj4gMTsKICAgICAgICAgICAgICAgICAgICBub2RlIHZhbF9yb3cgPSBSb3cuZ2V0KHAsIHAgKyBtaWQpOwogICAgICAgICAgICAgICAgICAgIG5vZGUgdmFsX2NvbCA9IENvbC5nZXQocCwgcCArIG1pZCk7CiAgICAgICAgICAgICAgICAgICAgaWYodmFsX3Jvdy5teCA+IHIyIHx8IHZhbF9yb3cubW4gPCByMSB8fCB2YWxfY29sLm14ID4gYzIgfHwgdmFsX2NvbC5tbiA8IGMxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFucyA9IG1pZDsKICAgICAgICAgICAgICAgICAgICAgICAgaGkgPSBtaWQgLSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGxvID0gbWlkICsgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZihhbnMgIT0gLTEpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgYW5zIDw8ICdcbic7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbnQgbG8gPSB3LCBoaSA9IE1PRCAtIDE7CiAgICAgICAgICAgIHdoaWxlKGxvIDw9IGhpKSB7CiAgICAgICAgICAgICAgICBpbnQgbWlkID0gKGxvICsgaGkpID4+IDE7CiAgICAgICAgICAgICAgICBub2RlIHZhbF9yb3cgPSBSb3cuZ2V0KDAsIG1pZCAtIHcpOwogICAgICAgICAgICAgICAgbm9kZSB2YWxfY29sID0gQ29sLmdldCgwLCBtaWQgLSB3KTsKICAgICAgICAgICAgICAgIGlmKHZhbF9yb3cubXggPiByMiB8fCB2YWxfcm93Lm1uIDwgcjEgfHwgdmFsX2NvbC5teCA+IGMyIHx8IHZhbF9jb2wubW4gPCBjMSkgewogICAgICAgICAgICAgICAgICAgIGFucyA9IG1pZDsKICAgICAgICAgICAgICAgICAgICBoaSA9IG1pZCAtIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGxvID0gbWlkICsgMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0IDw8IGFucyA8PCAnXG4nOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9