#include <bits/stdc++.h>
using namespace std;
int getint() {
  unsigned int c;
  int x = 0;
  while (((c = getchar()) - '0') >= 10) {
    if (c == '-') return -getint();
    if (!~c) exit(0);
  }
  do {
    x = (x << 3) + (x << 1) + (c - '0');
  } while (((c = getchar()) - '0') < 10);
  return x;
}
int height, width;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
inline bool inside(int x, int y) {
  return 0 <= x and x < height and 0 <= y and y < width;
}
inline bool move(int &nx, int &ny, int x, int y, int d) {
  nx = x + dx[d], ny = y + dy[d];
  return inside(nx, ny);
}
int n, m;
char in[111][111];
int minchar(char a, char b) {
  int used[5] = {};
  used[a - 'A'] = used[b - 'A'] = 1;
  for (int i = 0; i < 5; i++)
    if (used[i] == 0) return i + 'A';
}
void solve(int x, int y) {
  int hx, vy, xx, yy, ex;
  vector<int> used(10, 0);
  for (int d = 0; d < 4; d++)
    if (move(xx, yy, x, y, d)) {
      if (in[xx][yy] != '~') used[in[xx][yy] - 'A'] = 1;
    }
  char c;
  for (int i = 0; i < used.size(); i++)
    if (used[i] == 0) {
      c = i + 'A';
      break;
    }
  for (ex = 1;; ex++) {
    hx = x + ex, vy = ex + y;
    if (hx >= n) break;
    if (vy >= m) break;
    if (in[hx][y] != '~') break;
    if (in[x][vy] != '~') break;
    if (y > 0) {
      yy = y - 1;
      if (in[hx][yy] == c) break;
    }
    if (x > 0) {
      xx = x - 1;
      if (in[xx][vy] == c) break;
      if (minchar(c, in[xx][vy]) < c) break;
    } else if (c > 'A')
      break;
  }
  for (xx = x; xx < x + ex; xx++)
    for (yy = y; yy < y + ex; yy++) in[xx][yy] = c;
}
int main() {
  int i, j, tcc, tc = 1 << 28;
  for (tcc = 0; tcc < tc; tcc++) {
    height = n = getint(), width = m = getint();
    memset(in, '~', sizeof(in));
    for (i = 0; i < n; i++)
      for (j = 0; j < m; j++)
        if (in[i][j] == '~') {
          solve(i, j);
        }
    for (i = 0; i < n; i++) {
      for (j = 0; j < m; j++) putchar(in[i][j]);
      puts("");
    }
  }
  return 0;
}
