#include <bits/stdc++.h>
using namespace std;
int dx[] = {0, 0, 1, -1, 1, -1, 1, -1}, dy[] = {-1, 1, 0, 0, 1, -1, -1, 1};
void run();
int main() {
  ios::sync_with_stdio(0);
  cout << fixed << setprecision(16);
  run();
}
int n, m;
long long T = 100000000;
set<long long> solve(long long k, long long n) {
  long long nkk = n * k * k;
  set<long long> res;
  for (long long c = 1; c * c <= nkk; ++c)
    if (nkk % c == 0) {
      long long d = nkk / c;
      if (d <= c) break;
      if ((d - c) % 2 == 0 && (d - c) / 2 <= T) res.insert((d - c) / 2);
    }
  return res;
}
pair<long long, long long> solve_1d(long long n) {
  for (long long k = 1; k <= T; ++k) {
    set<long long> res = solve(k, n - 1);
    if (!res.empty()) return make_pair(k, *res.begin());
  }
  assert(0);
}
void run() {
  long long n, m;
  cin >> n >> m;
  if (n == 1 && m == 1) {
    cout << 1 << "\n";
    return;
  }
  if (n == 1) {
    pair<long long, long long> sub = solve_1d(m);
    for (int j = 0; j < m - 1; ++j) cout << sub.first << " ";
    cout << sub.second << "\n";
    return;
  }
  if (m == 1) {
    pair<long long, long long> sub = solve_1d(n);
    for (int j = 0; j < n - 1; ++j) cout << sub.first << "\n";
    cout << sub.second << "\n";
    return;
  }
  for (long long k = 1; k <= T; ++k) {
    set<long long> A = solve(k, m - 1), B = solve(k, n - 1);
    for (long long a : A)
      for (long long b : B) {
        set<long long> x1 = solve(a, n - 1), x2 = solve(b, m - 1);
        for (long long x : x1) {
          if (!((x2).find(x) != end(x2))) continue;
          for (int i = (0); i < (n - 1); ++i) {
            for (int j = (0); j < (m - 1); ++j) cout << k << " ";
            cout << a << "\n";
          }
          for (int j = (0); j < (m - 1); ++j) cout << b << " ";
          cout << x << "\n";
          return;
        }
      }
  }
  assert(0);
}
