#include <bits/stdc++.h>
using namespace std;
const int maxn = 110, dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1};
char ans[maxn][maxn];
inline bool able(int r, int c, char x) {
  for (int i = 0; i < 4; i++) {
    if (ans[r + dx[i]][c + dy[i]] == x) {
      return false;
    }
  }
  return true;
}
inline int mex(int r, int c) {
  for (char x = 'A'; x <= 'Z'; x++) {
    if (able(r, c, x)) {
      return x;
    }
  }
  return -1;
}
int n, m;
inline void extend(int r, int c) {
  char& tmp = ans[r][c];
  for (char x = 'A'; x <= 'Z'; x++) {
    if (able(r, c, x)) {
      tmp = x;
      break;
    }
  }
  for (int i = 2; r + i - 1 <= n && c + i - 1 <= m; i++) {
    if (mex(r, c + i - 1) < tmp) {
      return;
    }
    if (ans[r + i - 1][c - 1] == tmp || ans[r - 1][c + i - 1] == tmp) {
      return;
    }
    for (int j = r; j <= r + i - 1; j++) {
      if (ans[j][c + i - 1] || ans[j][c + i] == tmp) {
        return;
      }
    }
    for (int j = c; j <= c + i - 1; j++) {
      if (ans[r + i - 1][j] || ans[r + i][j] == tmp) {
        return;
      }
    }
    for (int j = r; j <= r + i - 1; j++) {
      ans[j][c + i - 1] = tmp;
    }
    for (int j = c; j <= c + i - 1; j++) {
      ans[r + i - 1][j] = tmp;
    }
  }
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      if (!ans[i][j]) {
        extend(i, j);
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    puts(ans[i] + 1);
  }
  return 0;
}
