#include <bits/stdc++.h>   using namespace std;   int n, k, q;   int it[35][800005];   struct point {     int a[10];     point(){};     int &operator[](int x) { return a[x]; }   };   point p[200005];   int sign(point &p, int bit) {     int ans = 0;     for (int i = 0; i < k; i++) {       if (bit & 1 == 1) {         ans += p[i];       } else {         ans -= p[i];       }       bit >>= 1;     }     return ans;   }   void build(int id, int l, int r) {     if (l == r - 1) {       for (int i = 0; i < (1 << k); i++) {         it[i][id] = sign(p[l], i);       }       return;     }     int mid = (l + r) / 2;     build(id * 2, l, mid);     build(id * 2 + 1, mid, r);     for (int i = 0; i < (1 << k); i++) {       it[i][id] = min(it[i][id * 2], it[i][id * 2 + 1]);     }   }   void update(int id, int l, int r, int pos, point &val) {     if (l == r - 1) {       for (int i = 0; i < (1 << k); i++) {         it[i][id] = sign(val, i);       }       return;     }     int mid = (l + r) / 2;     if (pos < mid) {       update(id * 2, l, mid, pos, val);     } else {       update(id * 2 + 1, mid, r, pos, val);     }     for (int i = 0; i < (1 << k); i++) {       it[i][id] = min(it[i][id * 2], it[i][id * 2 + 1]);     }   }   int chosen[35];   void get(int id, int l, int r, int a, int b) {     if (a >= b) return;     if (l == a && r == b) {       for (int i = 0; i < (1 << k); i++) {         chosen[i] = min(chosen[i], it[i][id]);       }       return;     }     int mid = (l + r) / 2;     get(id * 2, l, mid, a, min(mid, b));     get(id * 2 + 1, mid, r, max(mid, a), b);   }   int main() {     cin >> n >> k;     for (int i = 0; i < n; i++) {       for (int j = 0; j < k; j++) {         cin >> p[i][j];       }     }     build(1, 0, n);     cin >> q;     while (q--) {       int t;       cin >> t;       if (t == 1) {         int x;         cin >> x;         x--;         point cnt;         for (int i = 0; i < k; i++) {           cin >> cnt[i];         }         update(1, 0, n, x, cnt);       }       if (t == 2) {         int l, r;         cin >> l >> r;         l--;         for (int i = 0; i < (1 << k); i++) {           chosen[i] = 1e9;         }         get(1, 0, n, l, r);         int res = 0;         for (int i = 0; i < (1 << k); i++) {           res = max(res, abs(chosen[(1 << k) - i - 1] + chosen[i]));         }         cout << res << endl;       }     }   }   