#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n = 0, m = 0;
  cin >> n >> m;
  vector<vector<char> > ans(n + 2, vector<char>(m + 2));
  auto get = [&](int x, int y) {
    if (ans[x][y]) return ans[x][y];
    set<char> cur;
    cur.insert(ans[x - 1][y]);
    cur.insert(ans[x + 1][y]);
    cur.insert(ans[x][y - 1]);
    cur.insert(ans[x][y + 1]);
    char res = 'A';
    while (cur.count(res)) res++;
    return res;
  };
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++)
      if (!ans[i][j]) {
        char can = get(i, j);
        int k = 0;
        while (i + k <= n && j + k <= m && get(i, j + k) == can) k++;
        for (int ci = i; ci < i + k; ci++)
          for (int cj = j; cj < j + k; cj++) ans[ci][cj] = can;
      }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) cout << ans[i][j];
    cout << endl;
  }
  return 0;
}
