#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
const long long INF = 1e9, MOD = INF + 7;
long long gcd(long long a, long long b) { return (b ? gcd(b, a % b) : a); }
long long power(long long a, long long b) {
  return (!b ? 1 : power(a, b / 2) * power(a, b / 2) * (b % 2 ? a : 1));
}
long long mod(long long a) { return (a % MOD + MOD) % MOD; }
const long long N = 1e2 + 20;
long long n, m;
char a[N][N];
bool mark[N][N];
long long dx[4] = {+1, -1, 0, 0};
long long dy[4] = {0, 0, -1, +1};
bool isVal(long long x, long long y) {
  return (x >= 0 && y >= 0 && x < n && y < m);
}
bool couldUse(long long x, long long y, char c) {
  for (long long k = 0; k < 4; k++) {
    long long i = x + dx[k];
    long long j = y + dy[k];
    if (isVal(i, j) && a[i][j] == c) return false;
  }
  return true;
}
char getChar(long long x, long long y) {
  for (char c = 'A'; c <= 'Z'; c++)
    if (couldUse(x, y, c)) return c;
  return '?';
}
int32_t main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n >> m;
  for (long long x = 0; x < n; x++)
    for (long long y = 0; y < m; y++) {
      if (mark[x][y]) continue;
      char c = getChar(x, y);
      long long k = 0;
      while (k < min(n - x, m - y) && !mark[x][y + k] && c == getChar(x, y + k))
        k++;
      for (long long i = x; i < x + k; i++)
        for (long long j = y; j < y + k; j++) a[i][j] = c, mark[i][j] = true;
    }
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < m; j++) cout << a[i][j];
    cout << "\n";
  }
  return 0;
}
