<p>Given two positive integers <code>left</code> and <code>right</code>, find the two integers <code>num1</code> and <code>num2</code> such that:</p>

<ul>
	<li><code>left &lt;= num1 &lt; num2 &lt;= right </code>.</li>
	<li><code>num1</code> and <code>num2</code> are both <strong>prime</strong> numbers.</li>
	<li><code>num2 - num1</code> is the <strong>minimum</strong> amongst all other pairs satisfying the above conditions.</li>
</ul>

<p>Return <em>the positive integer array</em> <code>ans = [num1, num2]</code>. <em>If there are multiple pairs satisfying these conditions, return the one with the minimum</em> <code>num1</code> <em>value or</em> <code>[-1, -1]</code> <em>if such numbers do not exist.</em></p>

<p>A number greater than <code>1</code> is called <b>prime</b> if it is only divisible by <code>1</code> and itself.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> left = 10, right = 19
<strong>Output:</strong> [11,13]
<strong>Explanation:</strong> The prime numbers between 10 and 19 are 11, 13, 17, and 19.
The closest gap between any pair is 2, which can be achieved by [11,13] or [17,19].
Since 11 is smaller than 17, we return the first pair.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> left = 4, right = 6
<strong>Output:</strong> [-1,-1]
<strong>Explanation:</strong> There exists only one prime number in the given range, so the conditions cannot be satisfied.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= left &lt;= right &lt;= 10<sup>6</sup></code></li>
</ul>

<p>&nbsp;</p>
<style type="text/css">.spoilerbutton {display:block; border:dashed; padding: 0px 0px; margin:10px 0px; font-size:150%; font-weight: bold; color:#000000; background-color:cyan; outline:0; 
}
.spoiler {overflow:hidden;}
.spoiler > div {-webkit-transition: all 0s ease;-moz-transition: margin 0s ease;-o-transition: all 0s ease;transition: margin 0s ease;}
.spoilerbutton[value="Show Message"] + .spoiler > div {margin-top:-500%;}
.spoilerbutton[value="Hide Message"] + .spoiler {padding:5px;}
</style>

class Solution:
    def closestPrimes(self, left: int, right: int) -> List[int]:
        if left<=2 and right>=3 :
            return [2,3]
        if left==right:
            return [-1,-1]
        def lower(res, n):
            l = 0
            r = len(res) - 1
            mi = -1
            while l <= r:
                mid = (l + r) // 2
                if res[mid] > n:
                    r = mid - 1
                else:
                    l = mid + 1
                    mi = max(mi, mid)
            if mi == -1:  
                return 0
            return mi
        def upper(res,n):
            l=0
            r=len(res)-1
            mi=len(res)
            while l<=r:
                mid=(l+r)//2
                if res[mid]>=n:
                    r=mid-1
                    mi=min(mid,mi)
                else:
                    l=mid+1
            if mi == len(res):  # If no valid index was found, return the largest element
                return len(res)-1
            return mi
        
        def isPrime(x):
            for j in range(2,int(x**0.5)+1):
                if x%j==0:
                    return False
            return True
        res=[]
        for i in range(left,left+10000):
            if isPrime(i) is True:
                res.append(i)
        # print(res)
        # print(len(res))
        res1=upper(res,left)
        res2=lower(res,right)
        ct=float('inf')
        # print(res[res1],res[res2])
        dic={}
        if res1==res2:
            return [-1,-1]
        for i in range(res1,res2):
            if res[i+1]-res[i]==1:
                dic[(res[i],res[i+1])]=res[i+1]-res[i]
                break
            elif res[i+1]-res[i]==2:
                dic[(res[i],res[i+1])]=res[i+1]-res[i]
                break
            else:
                dic[(res[i],res[i+1])]=res[i+1]-res[i]
        sorted_dic = sorted(dic.items(), key=lambda item: item[1])
        if sorted_dic:
            x = sorted_dic[0][0] 
            # print(sorted_dic)
            return list(x)
        else:
            return [-1,-1]

1017