#include <bits/stdc++.h>
using namespace std;
char a[110][110];
int was[110];
int x, y;
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, -1, 0, 1};
bool can(int y1, int x1, int sz) {
  if (y1 + sz - 1 > y) return false;
  if (x1 + sz - 1 > x) return false;
  for (int i = 0; i < sz; ++i)
    for (int j = 0; j < sz; ++j)
      if (a[y1 + i][x1 + j] != '*') return false;
  return true;
}
char get_min(int y1, int x1) {
  for (int i = 'A'; i <= 'F'; ++i) was[i] = 0;
  was[a[y1 + 1][x1]] = 1;
  was[a[y1 - 1][x1]] = 1;
  was[a[y1][x1 + 1]] = 1;
  was[a[y1][x1 - 1]] = 1;
  for (int i = 'A'; i <= 'F'; ++i)
    if (!was[i]) return i;
  return -1;
}
void build(int y1, int x1, int sz, int c) {
  for (int i = 0; i < sz; ++i)
    for (int j = 0; j < sz; ++j) a[y1 + i][x1 + j] = c;
}
bool check_border(int y1, int x1, int sz, int c) {
  int xx, yy;
  for (int i = 0; i < sz; ++i)
    for (int j = 0; j < 4; ++j) {
      yy = y1 + i + dy[j];
      xx = x1 + dx[j];
      if (a[yy][xx] == c) return false;
      yy = y1 + i + dy[j];
      xx = x1 + sz - 1 + dx[j];
      if (a[yy][xx] == c) return false;
      yy = y1 + dy[j];
      xx = x1 + i + dx[j];
      if (a[yy][xx] == c) return false;
      yy = y1 + sz - 1 + dy[j];
      xx = x1 + i + dx[j];
      if (a[yy][xx] == c) return false;
    }
  return true;
}
void print() {
  for (int i = 1; i <= y; ++i) {
    for (int j = 1; j <= x; ++j) printf("%c", a[i][j]);
    printf("\n");
  }
}
int main() {
  memset(a, '*', sizeof(a));
  scanf("%i %i", &y, &x);
  for (int i = 1; i <= y; ++i)
    for (int j = 1; j <= x; ++j)
      if (a[i][j] == '*') {
        int c = get_min(i, j);
        int k = 1;
        while (true) {
          if (!can(i, j, k + 1)) break;
          if (get_min(i, j + k) < c) break;
          if (!check_border(i, j, k + 1, c)) break;
          k++;
        }
        build(i, j, k, c);
      }
  print();
  return 0;
}
