#include <bits/stdc++.h>
using namespace std;
int main() {
  int n, m;
  scanf("%d %d", &n, &m);
  if (n == 1 && m == 1) {
    printf("YES\n");
    printf("1\n");
    return 0;
  }
  if (n == 3 && m == 3) {
    printf("YES\n");
    printf("1 3 4 \n5 7 6\n9 2 8\n");
    return 0;
  }
  int arr[n + 1][m + 1];
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= m; j++) {
      arr[i][j] = ((i - 1) * m) + j;
    }
  }
  int x = max(n, m);
  if (x <= 3) {
    printf("NO\n");
  } else {
    if (n > m) {
      int tmp[m + 1][n + 1];
      int ans[m + 1][n + 1];
      for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
          tmp[j][i] = arr[i][j];
        }
      }
      for (int i = 1; i <= m; i++) {
        if (i % 2) {
          int cur = 1;
          for (int j = (n + 1) / 2; j >= 1; j--) {
            ans[i][(2 * cur) - 1] = tmp[i][j];
            cur++;
          }
          cur = 1;
          for (int j = n; j > ((n + 1) / 2); j--) {
            ans[i][2 * cur] = tmp[i][j];
            cur++;
          }
        } else {
          int cur = 1;
          for (int j = 1; j <= (n / 2); j++) {
            ans[i][2 * cur] = tmp[i][j];
            cur++;
          }
          cur = 1;
          for (int j = (n / 2) + 1; j <= n; j++) {
            ans[i][2 * cur - 1] = tmp[i][j];
            cur++;
          }
          if (n % 2) {
            swap(ans[i][1], ans[i][2]);
            swap(ans[i][1], ans[i - 1][1]);
            swap(ans[i - 1][2], ans[i][2]);
          }
        }
      }
      printf("YES\n");
      for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
          printf("%d ", ans[j][i]);
        }
        printf("\n");
      }
    } else {
      int ans[n + 1][m + 1];
      for (int i = 1; i <= n; i++) {
        if (i % 2) {
          int cur = 1;
          for (int j = (m + 1) / 2; j >= 1; j--) {
            ans[i][(2 * cur) - 1] = arr[i][j];
            cur++;
          }
          cur = 1;
          for (int j = m; j > ((m + 1) / 2); j--) {
            ans[i][2 * cur] = arr[i][j];
            cur++;
          }
        } else {
          int cur = 1;
          for (int j = 1; j <= (m / 2); j++) {
            ans[i][2 * cur] = arr[i][j];
            cur++;
          }
          cur = 1;
          for (int j = (m / 2) + 1; j <= m; j++) {
            ans[i][2 * cur - 1] = arr[i][j];
            cur++;
          }
          if (m % 2) {
            swap(ans[i][1], ans[i][2]);
            swap(ans[i][1], ans[i - 1][1]);
            swap(ans[i - 1][2], ans[i][2]);
          }
        }
      }
      printf("YES\n");
      for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
          printf("%d ", ans[i][j]);
        }
        printf("\n");
      }
    }
  }
}
