#include <bits/stdc++.h>
using namespace std;
bool ok(long long v) {
  long long u = pow(v, 0.5);
  while (u * u >= v) u--;
  while (u * u < v) u++;
  if (u * u == v) return true;
  return false;
}
int main() {
  srand(time(NULL));
  long long n, m, i, j;
  long long a[100], b[100];
  long long q[10009], c[109][109];
  long long ee = 0;
  {
    cin >> n >> m;
    if (ee != 0) puts("");
    ee++;
    while (1) {
      bool u = true;
      while (1) {
        bool flag = false;
        long long res = 0;
        for (i = 1; i < n; i++) {
          while (1) {
            bool used = false;
            a[i] = rand() % 10000 + 1;
            a[i] = a[i];
            if (!used) break;
          }
          res += a[i] * a[i];
        }
        for (i = 1; i <= 10000; i++) {
          bool used = false;
          if (!used && ok(1LL * i * i + res)) {
            flag = true;
            a[n] = 1LL * i;
            break;
          }
        }
        if (flag) break;
      }
      while (1) {
        bool flag = false;
        long long res = 0;
        for (i = 1; i < m; i++) {
          while (1) {
            bool used = false;
            b[i] = rand() % 10000 + 1;
            b[i] = b[i];
            if (!used) break;
          }
          res += b[i] * b[i];
        }
        for (i = 1; i <= 10000; i++) {
          bool used = false;
          if (!used && ok(1LL * i * i + res)) {
            flag = true;
            b[m] = 1LL * i;
            break;
          }
        }
        if (flag) break;
      }
      int tol = 0;
      for (i = 1; i <= n; i++) {
        for (j = 1; j <= m; j++) {
          c[i][j] = a[i] * b[j];
          q[++tol] = c[i][j];
        }
      }
      if (u) {
        for (i = 1; i <= n; i++) {
          for (j = 1; j <= m; j++) {
            if (j == 1)
              cout << c[i][j];
            else
              cout << " " << c[i][j];
          }
          cout << endl;
        }
        break;
      }
    }
  }
  return 0;
}
