One industrial factory is reforming working plan. The director suggested to set a mythical detail production norm. If at the beginning of the day there were x details in the factory storage, then by the end of the day the factory has to produce <image> (remainder after dividing x by m) more details. Unfortunately, no customer has ever bought any mythical detail, so all the details produced stay on the factory. 

The board of directors are worried that the production by the given plan may eventually stop (that means that there will be а moment when the current number of details on the factory is divisible by m). 

Given the number of details a on the first day and number m check if the production stops at some moment.

Input

The first line contains two integers a and m (1 ≤ a, m ≤ 105).

Output

Print "Yes" (without quotes) if the production will eventually stop, otherwise print "No".

Examples

Input

1 5


Output

No


Input

3 6


Output

Yes
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.io.BufferedOutputStream;
import java.io.PrintWriter;
import java.util.InputMismatchException;

public class Main {

    public static void main(String[] args) {
        if (args.length > 0 && args[0].toLowerCase().equals("local")) {
            try {
                System.setIn(new FileInputStream("input.txt"));
                System.setOut(new PrintStream(new File("output.txt")));
            } catch (IOException exc) {
            }
        }
        Task task = new Task();
        task.solve();
    }

    public static class Task {
        static final long MOD = (long) 1e9 + 7;
        static final PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));

        public void solve() {
            try {
                Scan sc = new Scan();
                int n = (int) sc.scanLong();
                int m = (int) sc.scanLong();
                int[] seen = new int[m];
                int runner = n;
                for (int i = 0; i < m; ++i) {
                    runner %= m;
                    if (runner == 0) {
                        out.println("Yes");
                        return;
                    }
                    if (seen[runner] == 1) {
                        out.println("No");
                        return;
                    }
                    seen[runner] = 1;
                    runner += runner;
                }
            } finally {
                out.close();
            }
        }

        private void debug(Object... x) {
            StringBuilder sb = new StringBuilder();
            for (Object o : x)
                sb.append(String.valueOf(o)).append(" ");
            out.println(sb);
        }
    }

    public static class Scan {
        private byte[] buf = new byte[1024];
        private int index;
        private InputStream in;
        private int total;

        public Scan() {
            in = System.in;
        }

        public int scan() {
            if (total < 0)
                throw new InputMismatchException();
            if (index >= total) {
                index = 0;
                try {
                    total = in.read(buf);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                if (total <= 0)
                    return -1;
            }
            return buf[index++];
        }

        public long scanLong() {
            long integer = 0;
            int n = scan();
            while (isWhiteSpace(n))
                n = scan();
            int neg = 1;
            if (n == '-') {
                neg = -1;
                n = scan();
            }
            while (!isWhiteSpace(n)) {
                if (n >= '0' && n <= '9') {
                    integer *= 10;
                    integer += n - '0';
                    n = scan();
                } else
                    throw new InputMismatchException();
            }
            return neg * integer;
        }

        public double scanDouble() {
            double doub = 0;
            int n = scan();
            while (isWhiteSpace(n))
                n = scan();
            int neg = 1;
            if (n == '-') {
                neg = -1;
                n = scan();
            }
            while (!isWhiteSpace(n) && n != '.') {
                if (n >= '0' && n <= '9') {
                    doub *= 10;
                    doub += n - '0';
                    n = scan();
                } else
                    throw new InputMismatchException();
            }
            if (n == '.') {
                n = scan();
                double temp = 1;
                while (!isWhiteSpace(n)) {
                    if (n >= '0' && n <= '9') {
                        temp /= 10;
                        doub += (n - '0') * temp;
                        n = scan();
                    } else
                        throw new InputMismatchException();
                }
            }
            return doub * neg;
        }

        public String scanString() {
            StringBuilder sb = new StringBuilder();
            int n = scan();
            while (isWhiteSpace(n))
                n = scan();
            while (!isWhiteSpace(n)) {
                sb.append((char) n);
                n = scan();
            }
            return sb.toString();
        }

        public char scanChar() {
            int n = scan();
            while (isWhiteSpace(n))
                n = scan();
            return (char) n;
        }

        private boolean isWhiteSpace(int n) {
            if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1)
                return true;
            return false;
        }
    }
}