#include <bits/stdc++.h>
using namespace std;
inline int readint() {
  int a = 0;
  char c = getchar(), f = 1;
  for (; c < '0' || c > '9'; c = getchar())
    if (c == '-') f = -f;
  for (; '0' <= c && c <= '9'; c = getchar())
    a = (a << 3) + (a << 1) + (c ^ 48);
  return a * f;
}
template <typename T>
void getMax(T& a, const T& b) {
  if (a < b) a = b;
}
template <typename T>
void getMin(T& a, const T& b) {
  if (b < a) a = b;
}
const int MaxN = 125;
int ans[MaxN][MaxN], n, m;
bool ok[10];
void check(int x, int y) {
  for (int i = 1; i < 10; ++i) ok[i] = true;
  ok[ans[x][y - 1]] = false;
  ok[ans[x - 1][y]] = false;
  ok[ans[x][y + 1]] = false;
  ok[ans[x + 1][y]] = false;
}
void fillIn(int x, int y, int t) {
  for (int r = 0; r <= n - x && r <= m - y; ++r) {
    bool ok = true;
    for (int i = 0; i <= r; ++i) {
      if (ans[x + r][y + i]) ok = false;
      if (ans[x + i][y + r]) ok = false;
    }
    if (t == 2 && r != 0)
      if (ans[x - 1][y + r] != 1) ok = false;
    if (ans[x - 1][y + r] == t) ok = false;
    if (ans[x + r][y - 1] == t) ok = false;
    for (int i = 0; i <= r; ++i)
      if (ans[x + i][y + r + 1] == t) ok = false;
    if (!ok) break;
    for (int i = 0; i <= r; ++i) {
      ans[x + r][y + i] = t;
      ans[x + i][y + r] = t;
    }
  }
}
int main() {
  n = readint(), m = readint();
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= m; ++j) {
      if (ans[i][j]) continue;
      check(i, j);
      if (ok[1])
        fillIn(i, j, 1);
      else if (ok[2])
        fillIn(i, j, 2);
      else if (ok[3])
        ans[i][j] = 3;
      else
        ans[i][j] = 4;
    }
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) putchar(ans[i][j] - 1 + 'A');
    putchar('\n');
  }
  return 0;
}
