#include <bits/stdc++.h>
using namespace std;
int aint[32][4 * 200010];
int a[200010][10], k, mini, mini2;
void update(int nod, int st, int dr, int cnt, int x) {
  int mid, s, j;
  if (st == dr) {
    s = 0;
    for (j = 1; j <= k; j++) {
      if (cnt & (1 << (j - 1)))
        s += a[x][j];
      else
        s -= a[x][j];
    }
    aint[cnt][nod] = s;
    return;
  }
  mid = (st + dr) / 2;
  if (x <= mid)
    update(2 * nod, st, mid, cnt, x);
  else
    update(2 * nod + 1, mid + 1, dr, cnt, x);
  aint[cnt][nod] = min(aint[cnt][2 * nod], aint[cnt][2 * nod + 1]);
}
void query(int nod, int st, int dr, int cnt, int l, int r) {
  int mid;
  if (l <= st && dr <= r) {
    mini = min(mini, aint[cnt][nod]);
    return;
  }
  mid = (st + dr) / 2;
  if (l <= mid) query(2 * nod, st, mid, cnt, l, r);
  if (mid + 1 <= r) query(2 * nod + 1, mid + 1, dr, cnt, l, r);
}
int modul(int x) {
  if (x < 0) return -x;
  return x;
}
int main() {
  int n, i, j, q, tip, l, r, maxi, x;
  scanf("%d%d", &n, &k);
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= k; j++) scanf("%d", &a[i][j]);
  }
  for (i = 1; i < 4 * n; i++)
    for (j = 0; j < (1 << k); j++) aint[j][i] = 1000000000;
  for (i = 1; i <= n; i++) {
    for (j = 0; j < (1 << k); j++) update(1, 1, n, j, i);
  }
  scanf("%d", &q);
  for (; q; q--) {
    scanf("%d", &tip);
    if (tip == 2) {
      scanf("%d%d", &l, &r);
      maxi = -1000000000;
      for (i = 0; i < (1 << k); i++) {
        mini2 = mini = 1000000000;
        query(1, 1, n, i, l, r);
        mini2 = mini;
        mini = 1000000000;
        query(1, 1, n, (1 << k) - 1 - i, l, r);
        maxi = max(maxi, modul(mini + mini2));
      }
      printf("%d\n", maxi);
    } else {
      scanf("%d", &x);
      for (j = 1; j <= k; j++) scanf("%d", &a[x][j]);
      for (i = 0; i < (1 << k); i++) update(1, 1, n, i, x);
    }
  }
  return 0;
}
