#include <bits/stdc++.h>
using namespace std;
const int MAXN = 110;
int n, m;
string mp[MAXN];
char getCurChar(int x, int y) {
  bool can[4];
  memset(can, true, sizeof(can));
  if (x > 0) can[mp[x - 1][y] - 'A'] = false;
  if (y > 0) can[mp[x][y - 1] - 'A'] = false;
  if (y < m && mp[x][y + 1] != '*') can[mp[x][y + 1] - 'A'] = false;
  for (int i = 0; i < 4; i++)
    if (can[i]) return 'A' + i;
  return '?';
}
void fillTable(int x, int y, int n, int m) {
  if (x > n || y > m) return;
  char ch = getCurChar(x, y);
  char ch2 = getCurChar(x, y + 1);
  int d1 = n - x + 1, d2 = m - y + 1;
  int d = min(d1, d2);
  if (ch != ch2) {
    mp[x][y] = ch;
    if (y == m) {
      fillTable(x + 1, y, n, m);
      return;
    }
    d2--;
    if (d1 == d2) {
      fillTable(x, y + 1, n, m);
      if (d1 != 1) fillTable(x + 1, y, n, y);
    } else if (d1 < d2) {
      fillTable(x, y + 1, n, y + d1);
      if (d1 != 1) fillTable(x + 1, y, n, y);
      fillTable(x, y + d1 + 1, n, m);
    } else {
      fillTable(x, y + 1, x + d2 - 1, m);
      if (d2 != 1) fillTable(x + 1, y, x + d2 - 1, y);
      fillTable(x + d2, y, n, m);
    }
    return;
  }
  for (int i = x; i < d + x; i++)
    for (int j = y; j < d + y; j++) mp[i][j] = ch;
  if (d1 == d2) return;
  if (d1 < d2)
    fillTable(x, y + d, n, m);
  else {
    fillTable(x + d, y, n, m);
  }
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) mp[i] = mp[i] + "*";
  }
  fillTable(0, 0, n - 1, m - 1);
  for (int i = 0; i < n; i++) cout << mp[i] << endl;
  return 0;
}
