#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);
}
char grid[111][111];
int check(int x, int y) {
  int res = 0, d, xx, yy;
  for (d = 0; d < 4; d++)
    if (move(xx, yy, x, y, d)) {
      if (grid[xx][yy]) {
        res = res | (1 << grid[xx][yy] - 'A');
      }
    }
  return res;
}
void solve(int x, int y) {
  int chk = check(x, y);
  int extend = 0;
  int minc;
  for (int i = 0;; i++) {
    if ((chk >> i & 1) == 0) {
      minc = i;
      break;
    }
  }
  int forbit = (1 << minc) - 1;
  for (extend = 1;; extend++) {
    int xlim = x + extend;
    int ylim = y + extend;
    if (xlim == height or ylim == width) break;
    if (grid[xlim][y] != 0) break;
    if (grid[x][ylim] != 0) break;
    int chkx = check(x, ylim);
    int chky = check(xlim, y);
    if ((chkx & forbit) != forbit) break;
    if ((chkx >> minc) & 1) break;
  }
  for (int xx = x; xx < x + extend; xx++) {
    for (int yy = y; yy < y + extend; yy++) {
      grid[xx][yy] = 'A' + minc;
    }
  }
}
int main() {
  int i, j, tcc, tc = 1 << 28;
  for (tcc = 0; tcc < tc; tcc++) {
    height = getint(), width = getint();
    memset(grid, 0, sizeof(grid));
    for (i = 0; i < height; i++)
      for (j = 0; j < width; j++) {
        if (grid[i][j] == 0) {
          solve(i, j);
        }
      }
    for (i = 0; i < height; i++) {
      for (j = 0; j < width; j++) cout << grid[i][j];
      puts("");
    }
  }
  return 0;
}
