Problem:
Score : 300 points

Problem Statement

There are N integers a_1, a_2, ..., a_N not less than 1.
The values of a_1, a_2, ..., a_N are not known, but it is known that a_1 \times a_2 \times ... \times a_N = P.

Find the maximum possible greatest common divisor of a_1, a_2, ..., a_N.

Constraints

1 \leq N \leq 10^{12}

1 \leq P \leq 10^{12}

Input

Input is given from Standard Input in the following format:

N P

Output

Print the answer.

Sample Input 1

3 24

Sample Output 1

2

The greatest common divisor would be 2 when, for example, a_1=2, a_2=6 and a_3=2.

Sample Input 2

5 1

Sample Output 2

1

As a_i are positive integers, the only possible case is a_1 = a_2 = a_3 = a_4 = a_5 = 1.

Sample Input 3

1 111

Sample Output 3

111

Sample Input 4

4 972439611840

Sample Output 4

206

Solution in Scala (2.11.7) (judge verdict: Accepted)


import java.util.Scanner
import scala.collection.mutable.ArrayBuffer

object Main extends App {
  val sc = new Scanner(System.in)
  def next(): String = sc.next()
  def nextInt(): Int = next().toInt
  def nextLong(): Long = next().toLong

  def taskA(): Unit = {
    val n = next()
    println(n.count(_ == '2'))
  }

  def taskB(): Unit = {
    val n, h, w = nextInt()
    val ans = 1.to(n).count { _ =>
      val a, b = nextInt()
      a >= h && b >= w
    }
    println(ans)
  }

  def taskC(): Unit = {
    val n, p = nextLong()
    val ps = factorize(p)
    var res = 1L
    for ((p, e) <- ps) {
      for (_ <- 1L to e / n)
        res *= p
    }
    println(res)
  }

  def factorize(x: Long): Seq[(Long, Int)] = {
    val res = new ArrayBuffer[(Long, Int)]()
    var p = 2L
    var tmp = x
    while (p * p <= tmp) {
      var exp = 0
      while (tmp % p == 0) {
        exp += 1
        tmp /= p
      }
      if (exp != 0) res.append((p, exp))
      p += 1
    }
    if (tmp != 1) res.append((tmp, 1))
    res
  }

  def test(): Unit = {
    require(factorize(2) == Seq((2, 1)))
    require(factorize(3) == Seq((3, 1)))
    require(factorize(4) == Seq((2, 2)))
    require(factorize(6) == Seq((2, 1), (3, 1)))
    require(factorize(1024) == Seq((2, 10)))
  }

  taskC()
}