#include <bits/stdc++.h>
using namespace std;
const long long N = 1005;
int n;
int m;
int n1;
int n2;
int p;
char c[N][N];
char c2[N][N];
set<pair<long long, long long> > st;
char findf(long long x, long long y) {
  char ans;
  if (c[x][y] >= 'A') return '0';
  for (auto i = 'A'; i <= 'Z'; i++)
    if ((x < 1 || c[x - 1][y] != i) && (y < 1 || c[x][y - 1] != i) &&
        (x == n - 1 || c[x + 1][y] != i) && (y == n - 1 || c[x][y + 1] != i)) {
      ans = i;
      break;
    }
  return ans;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) st.insert({i, j});
  while (st.size()) {
    auto f = *st.begin();
    char a = findf(f.first, f.second);
    long long mn = min(n - f.first, m - f.second);
    long long t = 1;
    for (int i = f.second + 1; i < m; i++)
      if (findf(f.first, i) == a)
        t++;
      else
        break;
    mn = min(mn, t);
    for (int i = f.first; i < n; i++)
      for (int j = f.second; j < m; j++) {
        if (c[i][j] >= 'A' && c[i][j] <= 'Z') {
          mn = min(mn, i - f.first + 1);
          mn = min(mn, j - f.second + 1);
        }
      }
    for (int i = f.first; i < mn + f.first; i++)
      for (int j = f.second; j < mn + f.second; j++) {
        c[i][j] = a;
        st.erase({i, j});
      }
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) cout << c[i][j];
    cout << '\n';
  }
  return 0;
}
