#include <bits/stdc++.h>
using namespace std;
int q1[1010][2], q2[1010][2];
int main(int argc, char *argv[]) {
  int a, b;
  while (~scanf("%d%d", &a, &b)) {
    int top1 = 0, top2 = 0;
    for (int i = 0; i < a; i++) {
      for (int j = 1; j < a; j++) {
        if (i * i + j * j == a * a) {
          q1[top1][0] = i;
          q1[top1++][1] = j;
        }
      }
    }
    for (int i = 0; i < b; i++) {
      for (int j = 1; j < b; j++) {
        if (i * i + j * j == b * b) {
          q2[top2][0] = i;
          q2[top2++][1] = j;
        }
      }
    }
    bool flag = 0;
    for (int i = 0; i < top1; i++) {
      if (flag) break;
      for (int j = 0; j < top2; j++) {
        if (q1[i][1] != q2[j][1]) {
          int x1 = q2[j][0] + q1[i][0];
          int y1 = q2[j][1] - q1[i][1];
          if (x1 * x1 + y1 * y1 == a * a + b * b) {
            printf("YES\n%d %d\n0 0\n%d %d\n", -q1[i][0], q1[i][1], q2[j][0],
                   q2[j][1]);
            flag = 1;
            break;
          }
        }
      }
    }
    if (!flag) puts("NO");
  }
  return 0;
}
