#include <bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long int ll;
#define rep(i, l, r) for ((i) = (l); (i) <=(r); (i)++)
typedef cc_hash_table<ll, ll, hash<ll>> ht;


ll a[1000000+777];
ll mp;
vector <ll> p,ne;
ll answer(ll i,ll mid)
{
	if(p[mid]==2*1e18)
	{
		return 3*1e18;
	}
	ll fx = p[i]*p[mid];
	return fx;
}
ll answer1(ll i,ll mid)
{
	if(ne[mid]==2*1e18)
	{
		return 3*1e18;
	}
	ll fx = ne[i]*ne[mid];
	return fx;
}
ll answer2(ll i,ll mid)
{
	if(ne[mid]==2*1e18)
	{
		return 3*1e18;
	}
	ll fx = p[i]*ne[mid];
	return fx;
}
ll cal2(ll z,ll n)
{
	if(z==0)
	{
		return mp;
	}
	else
	{
		
		ll i1;
	      ht a1;
	      ll ram = 0 ;
	      rep(i1,1,n)
	      {
		
		if(a[i1]!=0)
		{
		
			ll jx = z/a[i1];
			if(jx*a[i1]==z)
			{
			ram = ram + a1[jx];
		      }
		}
		
		
		a1[a[i1]]=a1[a[i1]]+1;
	      }	
	
	
	
	return ram;
	}
}


ll cal1(ll k,ll n)
{     



if(k==0)
{     ll sum = 0;
      ll g = p.size();
	ll q  = ne.size();
	sum=sum+((g-1)*(q-1));
	return sum ;
}
else if(k>0)
{
      ll i;
      ll sum = 0 ;
      ll g = p.size();
	rep(i,0,g-2)
	{
		ll low = i+1;
		ll high = g-1;
		ll ans = -1;
		ll km =0;
		
		while(low<=high && km==0)
		{
			ll mid  = (low + high)/2;
			
			if(answer(i,mid)>=k)
			{
				high = mid - 1;
			}
			else
			{
				if(answer(i,mid+1)<k)
				{
					low=mid+1;
				}
				else
				{
					km=1;
					ans=mid;
				}
			}
		}
		
		//cout<<ans<<"\n";
		if(ans!=-1)
		{
		ll real = abs(ans-i);
		sum=sum+real;
		}
	}
	
	////////////////////
	
      ll q  = ne.size();
	sum=sum+((g-1)*(q-1));
	g = ne.size();
	rep(i,0,g-2)
	{
		ll low = i+1;
		ll high = g-1;
		ll ans = -1;
		ll km =0;
		
		while(low<=high && km==0)
		{
			ll mid  = (low + high)/2;
			
			if(answer1(i,mid)>=k)
			{
				high = mid - 1;
			}
			else
			{
				if(answer1(i,mid+1)<k)
				{
					low=mid+1;
				}
				else
				{
					km=1;
					ans=mid;
				}	
			}
		}
		if(ans!=-1)
		{
		ll real = abs(ans-i);
		sum=sum+real;
		}
		
	}
	sum=sum + mp;
	return sum;
		
}
else
{
	ll i;
	//calculates leesss than equal to -k1...<=-k1
	//cout<<k<<"\n";
	ll k1=k-1;
	k1=-1*k1;
	ll x1=p.size();
	ll x2=ne.size();
	x1--;
	x2--;
	ll total =(x1*x2);
	ll calc=0;
	x2++;
	x1++;
	ll g1=x1;
	rep(i,0,g1-2)
	{
		ll low=0;
		ll high = x2-1;
		
		ll ans = -1;
		ll km =0;
		
		while(low<=high && km==0)
		{
			ll mid  = (low + high)/2;
			
			if(answer2(i,mid)>=k1)
			{
				high = mid - 1;
			}
			else
			{
				if(answer2(i,mid+1)<k1)
				{
					low=mid+1;
				}
				else
				{
					km=1;
					ans=mid;
				}
			}
		}
		
		if(ans!=-1)
		{
		ll real = abs(ans)+1;
		calc=calc+real;
		}
		
	}
	ll output = abs(total-calc);//all numbers ,x<=-k1
	
	ll hare_ram = output;//RAM-RAM!!!
	return hare_ram  ;
}



      
}


int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	ll n;ll k;
	cin>>n ; cin>>k;
	ll count = 0 ;
	ll i;ll lo=0;
	rep(i,1,n)
	{     ll x;
            cin>>x;
		a[i]=x;
		
		if(x>0)
		{lo++;
			p.push_back(x);
		}
		if(x==0)
		{
			count++;
		}
		if(x<0)
		{
			ne.push_back(-1*x);
		}
	}
	//cout<<lo<<"\n";
	p.push_back(2*1e18);ne.push_back(2*1e18);
	sort(p.begin(),p.end());
	sort(ne.begin(),ne.end());
	
	ll x = n - count ; 
	ll gq = count-1;
	gq=gq*(gq+1)/2;	
	mp = gq + x*count;

	//cout<<cal1(500000000000000192,n);
	
	
	
	ll low=-1e18-21;
	ll high=1e18+234;
	ll km = 0 ;ll answer =  -1;
	while(low<=high && km==0)
	{
		ll mid = (low+high)/2;
		ll x1=cal1(mid,n);//count of pairs with product less than mid.
		ll x2=cal2(mid,n);//count of pairs with product equal to mid.
		ll y = x1+x2;
		if(k>y)
		{
			low = mid + 1;
		}
		else
		{
			if(k>x1 && k<=x1+x2)
			{
				km=1;
				answer = mid;
			}
			else
			{
				high=mid-1;
			}
		}
	}
	cout<<answer  ;
	
	return 0;
}


Measured memory_bytes: 19928