#include <bits/stdc++.h>
using namespace std;
const int oo = 1e9 + 7;
struct matrix {
  vector<vector<long long> > M;
  vector<long long> &operator[](int i) { return M[i]; }
  int size() { return M.size(); }
  matrix(int n, int m) {
    M.assign(n + 1, vector<long long>(m + 1));
    ;
  }
};
matrix operator*(matrix a, matrix b) {
  int xa = a.size() - 1, ya = a[0].size() - 1;
  int xb = b.size() - 1, yb = b[0].size() - 1;
  matrix res = matrix(xa, yb);
  for (int i = 1; i < xa + 1; ++i)
    for (int j = 1; j < yb + 1; ++j) {
      long long cur = 0;
      for (int k = 1; k < xb + 1; ++k) cur = cur + (a[i][k] * b[k][j]);
      res[i][j] = cur;
    }
  return res;
}
int n, m;
void makeMatrixA(int n, matrix &a) {
  if (n == 1) {
    a[1][1] = 1;
    return;
  }
  if (n == 2) {
    a[1][1] = 3;
    a[2][1] = 4;
    return;
  }
  if (n & 1) {
    a[1][1] = 2;
    for (int i = 2; i < n; ++i) a[i][1] = 1;
    a[n][1] = (n + 1) / 2;
    return;
  }
  if (!(n & 1)) {
    for (int i = 1; i < n; ++i) a[i][1] = 1;
    a[n][1] = (n - 2) / 2;
    return;
  }
}
void makeMatrixB(int m, matrix &b) {
  if (m == 1) {
    b[1][1] = 1;
    return;
  }
  if (m == 2) {
    b[1][1] = 3;
    b[1][2] = 4;
    return;
  }
  if (m & 1) {
    b[1][1] = 2;
    for (int i = 2; i < m; ++i) b[1][i] = 1;
    b[1][m] = (m + 1) / 2;
    return;
  }
  if (!(m & 1)) {
    for (int i = 1; i < m; ++i) b[1][i] = 1;
    b[1][m] = (m - 2) / 2;
    return;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> m;
  matrix a = matrix(n, 1);
  matrix b = matrix(1, m);
  makeMatrixA(n, a);
  makeMatrixB(m, b);
  matrix res = matrix(n, m);
  res = a * b;
  for (int i = 1; i < n + 1; ++i) {
    for (int j = 1; j < m + 1; ++j) cout << res[i][j] << ' ';
    cout << "\n";
  }
}
