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 C (GCC 9.2.1) (judge verdict: Wrong Answer)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>

#define MODSIZE 1000000007
 
int main(){
  long long t;
  long long sum = 0;
  long long i,j,h;
  long long m,n,k,g;
  long long a,b,c;
 
  scanf("%lld", &t);
 
  for(i = 1;i <= t;i++){
    for(j = 1;j <= t;j++){
      for(h = 1;h <= t;h++){
        a = i; b = j; c = h;
 
        if(a == 1 || b == 1 || c == 1){
          sum += 1;
          continue;
        }
 
        if(a == b && b == c){
          sum += a;
          continue;
        }
 
        if(a > b){
          m = a; n = b;
          do{
            k = m % n;
            m = n; n = k;
          }while(k != 0);
        }
 
        else{
          m = b; n = a;
          do{
            k = m % n;
            m = n; n = k;
          }while(k != 0);
        }
 
        if(m == 1){
          sum += 1;
          continue;
        }
 
        if(m == c){
          sum += c;
          continue;
        }
 
        if(m > c){
          g = m; n = c;
          do{
            k = g % n;
            g = n; n = k;
          }while(k != 0);
        }
 
        else{
          g = c; n = m;
          do{
            k = g % n;
            g = n; n = k;
          }while(k != 0);
        }
 
        sum += g;
 
      }
    }
  }
 
  printf("%lld\n", sum % MODSIZE);
  return 0;
}