#include <bits/stdc++.h>
using namespace std;
int a[100 + 5], b[100 + 5];
int A[100 + 5][100 + 5];
int dig[100 + 5];
void mul(int *a, int n, int x) {
  for (int i = 0; i <= n - 1; i++) a[i] *= x;
}
void getans(int *a, int n) {
  int N = 0;
  while (n) {
    dig[++N] = n % 4;
    n /= 4;
  }
  int now = 1, ptr = 0;
  if (dig[N] == 1)
    a[ptr++] = 1;
  else if (dig[N] == 2)
    a[ptr++] = 3, a[ptr++] = 4, now *= 5;
  else if (dig[N] == 3)
    a[ptr++] = 1, a[ptr++] = 2, a[ptr++] = 2, now *= 3;
  for (int i = N - 1; i >= 1; i--) {
    memcpy(a + ptr, a, sizeof(int) * ptr);
    memcpy(a + ptr * 2, a, sizeof(int) * ptr);
    memcpy(a + ptr * 3, a, sizeof(int) * ptr);
    ptr *= 4;
    now *= 2;
    if (dig[i] == 1) {
      mul(a, ptr, 3);
      a[ptr++] = 4 * now;
      now *= 5;
    } else if (dig[i] == 2) {
      a[ptr++] = 2 * now;
      a[ptr++] = 2 * now;
      now *= 3;
    } else if (dig[i] == 3) {
      a[ptr++] = now;
      a[ptr++] = now;
      a[ptr++] = now;
      now *= 2;
    }
  }
}
long long mysqrt(long long n) {
  long long x = sqrt(n);
  while (x * x < n) x++;
  while (x * x > n) x--;
  return x;
}
void check(int n, int m) {
  for (int i = 1; i <= n; i++) {
    long long s = 0;
    for (int j = 1; j <= m; j++) s += 1ll * A[i][j] * A[i][j];
    long long x = mysqrt(s);
    assert(x * x == s);
  }
  for (int j = 1; j <= m; j++) {
    long long s = 0;
    for (int i = 1; i <= n; i++) s += 1ll * A[i][j] * A[i][j];
    long long x = mysqrt(s);
    assert(x * x == s);
  }
}
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  getans(a, n);
  getans(b, m);
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) A[i][j] = a[i - 1] * b[j - 1];
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) printf("%d%c", A[i][j], " \n"[j == m]);
  check(n, m);
  return 0;
}
