#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T& x) {
  bool fu = 0;
  char c;
  for (c = getchar(); c <= 32; c = getchar())
    ;
  if (c == '-') fu = 1, c = getchar();
  for (x = 0; c > 32; c = getchar()) x = x * 10 + c - '0';
  if (fu) x = -x;
};
template <class T>
inline void read(T& x, T& y) {
  read(x);
  read(y);
}
template <class T>
inline void read(T& x, T& y, T& z) {
  read(x);
  read(y);
  read(z);
}
inline char getc() {
  char c;
  for (c = getchar(); c <= 32; c = getchar())
    ;
  return c;
}
int n, m, i, j, k, l, p, x, y, t;
char a[110][110];
set<pair<int, int> > S;
bool cover(int x0, int y0, int x1, int y1, int c) {
  int i, j, k, l, p;
  if (a[x0 - 1][y1] == c) return 0;
  for (i = x0; i <= x1; i++)
    for (j = y0; j <= y1; j++)
      if (i == x1 || j == y1)
        if (a[i][j]) return 0;
  for (i = x0; i <= x1; i++)
    for (j = y0; j <= y1; j++) {
      a[i][j] = c;
      if (S.find(make_pair(i, j)) != S.end()) S.erase(make_pair(i, j));
    }
  return 1;
}
const int f1[] = {0, 0, 1, -1};
const int f2[] = {1, -1, 0, 0};
char tt(int x, int y) {
  char c;
  for (c = 'A'; c; c++) {
    bool pd = 1;
    for (int t = (0); t <= (3); t++)
      if (a[x + f1[t]][y + f2[t]] == c) {
        pd = 0;
        break;
      }
    if (pd) return c;
  }
}
char next() {
  if (S.empty()) return 'A';
  pair<int, int> u = (*S.begin());
  return tt(u.first, u.second);
}
int main() {
  read(n, m);
  for (i = 1; i <= n; i++)
    for (j = 1; j <= m; j++) S.insert(make_pair(i, j));
  while (1) {
    x = 0;
    for (i = 1; i <= n; i++) {
      for (j = 1; j <= m; j++)
        if (!a[i][j]) {
          x = i;
          y = j;
          break;
        }
      if (x) break;
    }
    if (i > n) break;
    char c = tt(x, y);
    for (t = 0; x + t <= n && y + t <= m; t++) {
      if (!cover(x, y, x + t, y + t, c)) break;
      if (next() < c) break;
    }
  }
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= m; j++) putchar(a[i][j]);
    puts("");
  }
  scanf("\n");
  return 0;
}
