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


unsigned long long ex(int a,unsigned long long b){
    int i=1;
    if(b==0){
        return i;
    }else if(b%2==0){
        i=i*ex(a,b/2)*ex(a,b/2)%1000000007;
        //printf("[%d,%d %d] ",i,a,b);
        return i;
    }else{
        i=i*ex(a,(b-1)/2)*ex(a,(b-1)/2)*a%1000000007;
        //printf("[%d,%d %d] ",i,a,b);
        return i;
    }
}

int main(){
  int n,k,i;
  scanf("%d %d",&n,&k);
  unsigned long long A[k+1],j,sum=0;
  for(i=k;i>=1;i--){
    A[i]=ex(k/i,n);
    //A[i]=pow(k/i,n);
    //printf("%d\n",A[i]);
  }
  for(i=k;i>=1;i--){
    for(j=2;j*i<=k;j++){
      A[i]-=A[j*i];
      //if(A[i]<0) printf("%d\n",A[i]);
    }
    //printf("%d\n",A[i]);
  }
  for(i=1;i<=k;i++){
    j=i*A[i];
    if(j>1000000007){
      j%=1000000007;
    }
    sum+=j;
    if(sum>1000000007){
      sum%=1000000007;
    }
  }
  printf("%lld",sum);
  return 0;
}