#include <bits/stdc++.h>
using namespace std;
int tri[900][3], cnt;
void pp() {
  int i, j, temp;
  for (i = 3; i < 1000; i++) {
    for (j = i; (temp = i * i + j * j) <= 1000000; j++) {
      int tt = sqrt(temp);
      if (tt * tt == temp) tri[cnt][0] = i, tri[cnt][1] = j, tri[cnt++][2] = tt;
    }
  }
}
int main() {
  pp();
  int a, b;
  while (scanf("%d%d", &a, &b) != EOF) {
    if (a > b) swap(a, b);
    int i, j;
    bool flag = false;
    for (i = 0; i < cnt; i++) {
      if (tri[i][2] == a) {
        for (j = i; j < cnt; j++)
          if (tri[j][2] == b) {
            if (tri[i][0] * tri[j][1] == tri[i][1] * tri[j][0]) {
              flag = true;
              break;
            }
          }
      }
      if (flag) break;
    }
    if (!flag) {
      puts("NO");
      continue;
    }
    puts("YES");
    puts("0 0");
    if (tri[i][1] == tri[j][0]) {
      printf("%d %d\n", tri[i][1], tri[i][0]);
      printf("%d %d\n", -tri[j][0], tri[j][1]);
    } else {
      printf("%d %d\n", tri[i][0], tri[i][1]);
      printf("%d %d\n", -tri[j][1], tri[j][0]);
    }
  }
  return 0;
}
