import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

public class Main {
	final int _intMax = Integer.MAX_VALUE; // =2147483647>10^9
	final int _intMin = Integer.MIN_VALUE;
	final long _longMax = Long.MAX_VALUE; // =9223372036854775807L>10^18
	final long _longMin = Long.MIN_VALUE;
	static boolean bElapsed = false;

	void solve() {
		int[] ia = readNums();
		int a = ia[0];
		int b = ia[1];
		int c;
		if (b < 10) {
			c = a * 10 + b;
		} else if (b < 100) {
			c = a * 100 + b;
		} else {
			c = a * 1000 + b;
		}
		int d = sqrt(c);
		if (d * d == c) {
			pln("Yes");
		} else {
			pln("No");
		}
	}

	int sqrt(long n) {
		return (int) Math.sqrt(n);
	}

	int pint(String s) {
		return Integer.parseInt(s);
	}

	long plong(String s) {
		return Long.parseLong(s);
	}

	String readLine() {
		try {
			return _in.readLine();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	int readNum() {
		String line = readLine();
		return pint(line);
	}

	String[] readFlds() {
		String line = readLine();
		return line.split(" ");
	}

	int[] readNums() {
		String[] flds = readFlds();
		int[] nums = new int[flds.length];
		for (int i = 0; i < flds.length; i++) {
			nums[i] = pint(flds[i]);
		}
		return nums;
	}

	void p(char c) {
		_out.print(c);
	}

	void pln(char c) {
		_out.println(c);
	}

	void p(double d) {
		_out.print(d);
	}

	void pln(double d) {
		_out.println(d);
	}

	void p(long l) {
		_out.print(l);
	}

	void pln(long l) {
		_out.println(l);
	}

	void p(String s) {
		_out.print(s);
	}

	void pln(String s) {
		_out.println(s);
	}

	static BufferedReader _in;
	static PrintWriter _out;

	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		_in = new BufferedReader(new InputStreamReader(System.in));
		_out = new PrintWriter(System.out);
		new Main().solve();
		_out.flush();
		long end = System.currentTimeMillis();
		if (bElapsed) {
			System.err.println((end - start) + "ms");
		}
	}
} import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStreamReader; InputStreamReader java.io import java.io.PrintWriter; PrintWriter java.io public class Main {
	final int _intMax = Integer.MAX_VALUE; // =2147483647>10^9
	final int _intMin = Integer.MIN_VALUE;
	final long _longMax = Long.MAX_VALUE; // =9223372036854775807L>10^18
	final long _longMin = Long.MIN_VALUE;
	static boolean bElapsed = false;

	void solve() {
		int[] ia = readNums();
		int a = ia[0];
		int b = ia[1];
		int c;
		if (b < 10) {
			c = a * 10 + b;
		} else if (b < 100) {
			c = a * 100 + b;
		} else {
			c = a * 1000 + b;
		}
		int d = sqrt(c);
		if (d * d == c) {
			pln("Yes");
		} else {
			pln("No");
		}
	}

	int sqrt(long n) {
		return (int) Math.sqrt(n);
	}

	int pint(String s) {
		return Integer.parseInt(s);
	}

	long plong(String s) {
		return Long.parseLong(s);
	}

	String readLine() {
		try {
			return _in.readLine();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	int readNum() {
		String line = readLine();
		return pint(line);
	}

	String[] readFlds() {
		String line = readLine();
		return line.split(" ");
	}

	int[] readNums() {
		String[] flds = readFlds();
		int[] nums = new int[flds.length];
		for (int i = 0; i < flds.length; i++) {
			nums[i] = pint(flds[i]);
		}
		return nums;
	}

	void p(char c) {
		_out.print(c);
	}

	void pln(char c) {
		_out.println(c);
	}

	void p(double d) {
		_out.print(d);
	}

	void pln(double d) {
		_out.println(d);
	}

	void p(long l) {
		_out.print(l);
	}

	void pln(long l) {
		_out.println(l);
	}

	void p(String s) {
		_out.print(s);
	}

	void pln(String s) {
		_out.println(s);
	}

	static BufferedReader _in;
	static PrintWriter _out;

	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		_in = new BufferedReader(new InputStreamReader(System.in));
		_out = new PrintWriter(System.out);
		new Main().solve();
		_out.flush();
		long end = System.currentTimeMillis();
		if (bElapsed) {
			System.err.println((end - start) + "ms");
		}
	}
} Main final int _intMax = Integer.MAX_VALUE; // =2147483647>10^9 _intMax Integer.MAX_VALUE Integer Integer.MAX_VALUE final int _intMin = Integer.MIN_VALUE; _intMin Integer.MIN_VALUE Integer Integer.MIN_VALUE final long _longMax = Long.MAX_VALUE; // =9223372036854775807L>10^18 _longMax Long.MAX_VALUE Long Long.MAX_VALUE final long _longMin = Long.MIN_VALUE; _longMin Long.MIN_VALUE Long Long.MIN_VALUE static boolean bElapsed = false; bElapsed false static BufferedReader _in; _in static PrintWriter _out; _out void solve() {
		int[] ia = readNums();
		int a = ia[0];
		int b = ia[1];
		int c;
		if (b < 10) {
			c = a * 10 + b;
		} else if (b < 100) {
			c = a * 100 + b;
		} else {
			c = a * 1000 + b;
		}
		int d = sqrt(c);
		if (d * d == c) {
			pln("Yes");
		} else {
			pln("No");
		}
	} solve {
		int[] ia = readNums();
		int a = ia[0];
		int b = ia[1];
		int c;
		if (b < 10) {
			c = a * 10 + b;
		} else if (b < 100) {
			c = a * 100 + b;
		} else {
			c = a * 1000 + b;
		}
		int d = sqrt(c);
		if (d * d == c) {
			pln("Yes");
		} else {
			pln("No");
		}
	} int[] ia = readNums(); ia readNums() readNums int a = ia[0]; a ia[0] ia 0 int b = ia[1]; b ia[1] ia 1 int c; c if (b < 10) {
			c = a * 10 + b;
		} else if (b < 100) {
			c = a * 100 + b;
		} else {
			c = a * 1000 + b;
		} b < 10 b 10 {
			c = a * 10 + b;
		} c = a * 10 + b c a * 10 + b a * 10 a 10 b if (b < 100) {
			c = a * 100 + b;
		} else {
			c = a * 1000 + b;
		} b < 100 b 100 {
			c = a * 100 + b;
		} c = a * 100 + b c a * 100 + b a * 100 a 100 b {
			c = a * 1000 + b;
		} c = a * 1000 + b c a * 1000 + b a * 1000 a 1000 b int d = sqrt(c); d sqrt(c) sqrt c if (d * d == c) {
			pln("Yes");
		} else {
			pln("No");
		} d * d == c d * d d d c {
			pln("Yes");
		} pln("Yes") pln "Yes" {
			pln("No");
		} pln("No") pln "No" int sqrt(long n) {
		return (int) Math.sqrt(n);
	} sqrt {
		return (int) Math.sqrt(n);
	} return (int) Math.sqrt(n); (int) Math.sqrt(n) Math.sqrt Math n long n n int pint(String s) {
		return Integer.parseInt(s);
	} pint {
		return Integer.parseInt(s);
	} return Integer.parseInt(s); Integer.parseInt(s) Integer.parseInt Integer s String s s long plong(String s) {
		return Long.parseLong(s);
	} plong {
		return Long.parseLong(s);
	} return Long.parseLong(s); Long.parseLong(s) Long.parseLong Long s String s s String readLine() {
		try {
			return _in.readLine();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	} readLine {
		try {
			return _in.readLine();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	} try {
			return _in.readLine();
		} catch (IOException e) {
			throw new RuntimeException(e);
		} catch (IOException e) {
			throw new RuntimeException(e);
		} IOException e {
			throw new RuntimeException(e);
		} throw new RuntimeException(e); new RuntimeException(e) {
			return _in.readLine();
		} return _in.readLine(); _in.readLine() _in.readLine _in int readNum() {
		String line = readLine();
		return pint(line);
	} readNum {
		String line = readLine();
		return pint(line);
	} String line = readLine(); line readLine() readLine return pint(line); pint(line) pint line String[] readFlds() {
		String line = readLine();
		return line.split(" ");
	} readFlds {
		String line = readLine();
		return line.split(" ");
	} String line = readLine(); line readLine() readLine return line.split(" "); line.split(" ") line.split line " " int[] readNums() {
		String[] flds = readFlds();
		int[] nums = new int[flds.length];
		for (int i = 0; i < flds.length; i++) {
			nums[i] = pint(flds[i]);
		}
		return nums;
	} readNums {
		String[] flds = readFlds();
		int[] nums = new int[flds.length];
		for (int i = 0; i < flds.length; i++) {
			nums[i] = pint(flds[i]);
		}
		return nums;
	} String[] flds = readFlds(); flds readFlds() readFlds int[] nums = new int[flds.length]; nums new int[flds.length] flds.length flds flds.length for (int i = 0; i < flds.length; i++) {
			nums[i] = pint(flds[i]);
		} int i = 0; int i = 0; i 0 i < flds.length i flds.length flds flds.length i++ i++ i {
			nums[i] = pint(flds[i]);
		} {
			nums[i] = pint(flds[i]);
		} nums[i] = pint(flds[i]) nums[i] nums i pint(flds[i]) pint flds[i] flds i return nums; nums void p(char c) {
		_out.print(c);
	} p {
		_out.print(c);
	} _out.print(c) _out.print _out c char c c void pln(char c) {
		_out.println(c);
	} pln {
		_out.println(c);
	} _out.println(c) _out.println _out c char c c void p(double d) {
		_out.print(d);
	} p {
		_out.print(d);
	} _out.print(d) _out.print _out d double d d void pln(double d) {
		_out.println(d);
	} pln {
		_out.println(d);
	} _out.println(d) _out.println _out d double d d void p(long l) {
		_out.print(l);
	} p {
		_out.print(l);
	} _out.print(l) _out.print _out l long l l void pln(long l) {
		_out.println(l);
	} pln {
		_out.println(l);
	} _out.println(l) _out.println _out l long l l void p(String s) {
		_out.print(s);
	} p {
		_out.print(s);
	} _out.print(s) _out.print _out s String s s void pln(String s) {
		_out.println(s);
	} pln {
		_out.println(s);
	} _out.println(s) _out.println _out s String s s public static void main(String[] args) {
		long start = System.currentTimeMillis();
		_in = new BufferedReader(new InputStreamReader(System.in));
		_out = new PrintWriter(System.out);
		new Main().solve();
		_out.flush();
		long end = System.currentTimeMillis();
		if (bElapsed) {
			System.err.println((end - start) + "ms");
		}
	} main {
		long start = System.currentTimeMillis();
		_in = new BufferedReader(new InputStreamReader(System.in));
		_out = new PrintWriter(System.out);
		new Main().solve();
		_out.flush();
		long end = System.currentTimeMillis();
		if (bElapsed) {
			System.err.println((end - start) + "ms");
		}
	} long start = System.currentTimeMillis(); start System.currentTimeMillis() System.currentTimeMillis System _in = new BufferedReader(new InputStreamReader(System.in)) _in new BufferedReader(new InputStreamReader(System.in)) _out = new PrintWriter(System.out) _out new PrintWriter(System.out) new Main().solve() new Main().solve new Main() _out.flush() _out.flush _out long end = System.currentTimeMillis(); end System.currentTimeMillis() System.currentTimeMillis System if (bElapsed) {
			System.err.println((end - start) + "ms");
		} bElapsed {
			System.err.println((end - start) + "ms");
		} System.err.println((end - start) + "ms") System.err.println System.err System System.err (end - start) + "ms" (end - start) end start "ms" String[] args args public class Main {
	final int _intMax = Integer.MAX_VALUE; // =2147483647>10^9
	final int _intMin = Integer.MIN_VALUE;
	final long _longMax = Long.MAX_VALUE; // =9223372036854775807L>10^18
	final long _longMin = Long.MIN_VALUE;
	static boolean bElapsed = false;

	void solve() {
		int[] ia = readNums();
		int a = ia[0];
		int b = ia[1];
		int c;
		if (b < 10) {
			c = a * 10 + b;
		} else if (b < 100) {
			c = a * 100 + b;
		} else {
			c = a * 1000 + b;
		}
		int d = sqrt(c);
		if (d * d == c) {
			pln("Yes");
		} else {
			pln("No");
		}
	}

	int sqrt(long n) {
		return (int) Math.sqrt(n);
	}

	int pint(String s) {
		return Integer.parseInt(s);
	}

	long plong(String s) {
		return Long.parseLong(s);
	}

	String readLine() {
		try {
			return _in.readLine();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	int readNum() {
		String line = readLine();
		return pint(line);
	}

	String[] readFlds() {
		String line = readLine();
		return line.split(" ");
	}

	int[] readNums() {
		String[] flds = readFlds();
		int[] nums = new int[flds.length];
		for (int i = 0; i < flds.length; i++) {
			nums[i] = pint(flds[i]);
		}
		return nums;
	}

	void p(char c) {
		_out.print(c);
	}

	void pln(char c) {
		_out.println(c);
	}

	void p(double d) {
		_out.print(d);
	}

	void pln(double d) {
		_out.println(d);
	}

	void p(long l) {
		_out.print(l);
	}

	void pln(long l) {
		_out.println(l);
	}

	void p(String s) {
		_out.print(s);
	}

	void pln(String s) {
		_out.println(s);
	}

	static BufferedReader _in;
	static PrintWriter _out;

	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		_in = new BufferedReader(new InputStreamReader(System.in));
		_out = new PrintWriter(System.out);
		new Main().solve();
		_out.flush();
		long end = System.currentTimeMillis();
		if (bElapsed) {
			System.err.println((end - start) + "ms");
		}
	}
} public class Main {
	final int _intMax = Integer.MAX_VALUE; // =2147483647>10^9
	final int _intMin = Integer.MIN_VALUE;
	final long _longMax = Long.MAX_VALUE; // =9223372036854775807L>10^18
	final long _longMin = Long.MIN_VALUE;
	static boolean bElapsed = false;

	void solve() {
		int[] ia = readNums();
		int a = ia[0];
		int b = ia[1];
		int c;
		if (b < 10) {
			c = a * 10 + b;
		} else if (b < 100) {
			c = a * 100 + b;
		} else {
			c = a * 1000 + b;
		}
		int d = sqrt(c);
		if (d * d == c) {
			pln("Yes");
		} else {
			pln("No");
		}
	}

	int sqrt(long n) {
		return (int) Math.sqrt(n);
	}

	int pint(String s) {
		return Integer.parseInt(s);
	}

	long plong(String s) {
		return Long.parseLong(s);
	}

	String readLine() {
		try {
			return _in.readLine();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	int readNum() {
		String line = readLine();
		return pint(line);
	}

	String[] readFlds() {
		String line = readLine();
		return line.split(" ");
	}

	int[] readNums() {
		String[] flds = readFlds();
		int[] nums = new int[flds.length];
		for (int i = 0; i < flds.length; i++) {
			nums[i] = pint(flds[i]);
		}
		return nums;
	}

	void p(char c) {
		_out.print(c);
	}

	void pln(char c) {
		_out.println(c);
	}

	void p(double d) {
		_out.print(d);
	}

	void pln(double d) {
		_out.println(d);
	}

	void p(long l) {
		_out.print(l);
	}

	void pln(long l) {
		_out.println(l);
	}

	void p(String s) {
		_out.print(s);
	}

	void pln(String s) {
		_out.println(s);
	}

	static BufferedReader _in;
	static PrintWriter _out;

	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		_in = new BufferedReader(new InputStreamReader(System.in));
		_out = new PrintWriter(System.out);
		new Main().solve();
		_out.flush();
		long end = System.currentTimeMillis();
		if (bElapsed) {
			System.err.println((end - start) + "ms");
		}
	}
} Main
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

public class Main {
	final int _intMax = Integer.MAX_VALUE; // =2147483647>10^9
	final int _intMin = Integer.MIN_VALUE;
	final long _longMax = Long.MAX_VALUE; // =9223372036854775807L>10^18
	final long _longMin = Long.MIN_VALUE;
	static boolean bElapsed = false;

	void solve() {
		int[] ia = readNums();
		int a = ia[0];
		int b = ia[1];
		int c;
		if (b < 10) {
			c = a * 10 + b;
		} else if (b < 100) {
			c = a * 100 + b;
		} else {
			c = a * 1000 + b;
		}
		int d = sqrt(c);
		if (d * d == c) {
			pln("Yes");
		} else {
			pln("No");
		}
	}

	int sqrt(long n) {
		return (int) Math.sqrt(n);
	}

	int pint(String s) {
		return Integer.parseInt(s);
	}

	long plong(String s) {
		return Long.parseLong(s);
	}

	String readLine() {
		try {
			return _in.readLine();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	int readNum() {
		String line = readLine();
		return pint(line);
	}

	String[] readFlds() {
		String line = readLine();
		return line.split(" ");
	}

	int[] readNums() {
		String[] flds = readFlds();
		int[] nums = new int[flds.length];
		for (int i = 0; i < flds.length; i++) {
			nums[i] = pint(flds[i]);
		}
		return nums;
	}

	void p(char c) {
		_out.print(c);
	}

	void pln(char c) {
		_out.println(c);
	}

	void p(double d) {
		_out.print(d);
	}

	void pln(double d) {
		_out.println(d);
	}

	void p(long l) {
		_out.print(l);
	}

	void pln(long l) {
		_out.println(l);
	}

	void p(String s) {
		_out.print(s);
	}

	void pln(String s) {
		_out.println(s);
	}

	static BufferedReader _in;
	static PrintWriter _out;

	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		_in = new BufferedReader(new InputStreamReader(System.in));
		_out = new PrintWriter(System.out);
		new Main().solve();
		_out.flush();
		long end = System.currentTimeMillis();
		if (bElapsed) {
			System.err.println((end - start) + "ms");
		}
	}
}
