What's next, Achilles? Powerful numbers are positive integers such that, when expressed as a prime factorisation:
$$a = p_1^{e_1} \times p_2^{e_2} \times p_3^{e_3} \cdots \times p_k^{e_k}$$
all exponents \$e_1, e_2, ...\$ are greater than or equal to \$2\$. Note that the exponents do not include zero exponents, as exampled by \$200 = 2^3 \times 3^0\times  5^2 = 2^3 \times 5^2\$ being a powerful number. This includes all perfect powers, and a few &quot;extra&quot; numbers that are not perfect powers.
Achilles numbers are powerful numbers that are not perfect powers. The smallest Achilles number is \$72 = 2^3 \times 3^2\$. The Achilles numbers less than or equal to \$500\$ are \$72, 108, 200, 288, 392, 432\$ and \$500\$.
You are to take an Achilles number as input and output the smallest Achilles number greater than the input.
You may input and output in any convenient method. This is code-golf so the shortest code in bytes wins
Test Cases
input output
   72    108
  108    200
  200    288
  800    864
 1152   1323
 4500   4563
 3456   3528
 4563   4608
43808  43904
90828  91592
28800  29403
64800  64827
29768  30375

The program I used to generate these test cases. Contains spoilers for anyone who can understand Jelly.
J, 26 bytes
_(]+1-1&lt;/@(=],+./)q:)^:_&gt;:

Try it online!
I started with the &quot;do-until&quot; idiom f^:g^:_ with g boolean (apply f while g is true), but soon realized that the &quot;find next integer&quot; can be written in a single fixpoint (]+1-g)^:_. The only problem is that we don't have a straightforward/more golfy way to express the boolean negation of g other than 1-g.
How it works
_(]+1-1&lt;/@(=],+./)q:)^:_&gt;:  NB. Input: n
                        &gt;:  NB. n+1
_(                  )^:_    NB. Fixpoint with left arg of _ (infinity)...
                  q:    NB. (_ q: n) gives prime exponents including zeros
                        NB. _ q: 700 -&gt; 2 0 2 1 (2^2 * 5^2 * 7^1)
          ( ],+./)      NB. Append GCD of ^ to itself
      1    =            NB. Test if each number equals 1 (gives boolean vector)
       &lt;/@   NB. Test if the only 1 is the last item
  ]+1-       NB. Negate the condition and add to the input number