import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.lang.*;
import static java.lang.Math.sqrt;
public class Main {
public static void main(String[] args) {
long cnt = 0;
long MOD = 998244353;
Scanner sc = new Scanner(System.in);
long a = sc.nextLong();
long b = sc.nextLong();
long num = fastPower(a,b);
long num1 = num;
ArrayList<Long> arr = new ArrayList<Long>();
for(long i = 2; i <= sqrt(num1); i++){
if(num % i == 0){
arr.add(i);
while(num % i == 0){
num /= i;
}
}
}
for(long i = 2; i < num1; i++){
for(int j = 0; j < arr.size(); j++){
if(i % arr.get(j) == 0){
cnt = (cnt + 1) % MOD;
break;
}
}
}
cnt = (cnt + 1) % MOD;
cnt = num1 - cnt;
System.out.println(cnt);
}
public static long fastPower(long base, long power) {
long result = 1;
while (power > 0) {
if (power % 2 == 0) {
//如果指数为偶数
power = power / 2;//把指数缩小为一半
base = base * base;//底数变大成原来的平方
} else {
//如果指数为奇数
power = power - 1;//把指数减去1,使其变成一个偶数
result = result * base;//此时记得要把指数为奇数时分离出来的底数的一次方收集好
power = power / 2;//此时指数为偶数,可以继续执行操作
base = base * base;
}
}
return result;
}
}