Problem:
Score : 500 points

Problem Statement

Consider sequences \{A_1,...,A_N\} of length N consisting of integers between 1 and K (inclusive).

There are K^N such sequences. Find the sum of \gcd(A_1, ..., A_N) over all of them.

Since this sum can be enormous, print the value modulo (10^9+7).

Here \gcd(A_1, ..., A_N) denotes the greatest common divisor of A_1, ..., A_N.

Constraints

2 \leq N \leq 10^5

1 \leq K \leq 10^5

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N K

Output

Print the sum of \gcd(A_1, ..., A_N) over all K^N sequences, modulo (10^9+7).

Sample Input 1

3 2

Sample Output 1

9

\gcd(1,1,1)+\gcd(1,1,2)+\gcd(1,2,1)+\gcd(1,2,2)
+\gcd(2,1,1)+\gcd(2,1,2)+\gcd(2,2,1)+\gcd(2,2,2)
=1+1+1+1+1+1+1+2=9

Thus, the answer is 9.

Sample Input 2

3 200

Sample Output 2

10813692

Sample Input 3

100000 100000

Sample Output 3

742202979

Be sure to print the sum modulo (10^9+7).

Solution in Rust (1.42.0) (judge verdict: Accepted)

use proconio::{input, fastout};

const MOD: usize = 1_000_000_007;

fn modpow(mut a: usize, mut x: usize, m: usize) -> usize {
    let mut ret = 1;
    while x > 0 {
        if x & 1 == 1 { ret = ret * a % m }
        a = a * a % m;
        x >>= 1;
    }
    ret
}


fn count_gcd_is_1(n: usize, k: usize, count: &mut Vec<usize>) -> usize {
    let mut ret = modpow(k, n, MOD);
    for i in 2..=k {
        let j = k / i;
        if count[j] == 0 {
            count[j] = count_gcd_is_1(n, j, count);
        }
        ret = (ret + MOD - count[j]) % MOD;
    }
    ret
}

#[fastout]
fn main() {
    input! {
        n: usize,
        k: usize,
    }

    let mut count = vec![0; k + 1];
    let mut ans = (k / 2 + 1 + k) * (k - k / 2) / 2 % MOD;

    for i in 1..=k / 2 {
        ans = (ans + i * count_gcd_is_1(n, k / i, &mut count)) % MOD
    }

    println!("{}", ans);
}