Ashish has an array a of size n.

A subsequence of a is defined as a sequence that can be obtained from a by deleting some elements (possibly none), without changing the order of the remaining elements.

Consider a subsequence s of a. He defines the cost of s as the minimum between: 

  * The maximum among all elements at odd indices of s. 
  * The maximum among all elements at even indices of s. 



Note that the index of an element is its index in s, rather than its index in a. The positions are numbered from 1. So, the cost of s is equal to min(max(s_1, s_3, s_5, …), max(s_2, s_4, s_6, …)).

For example, the cost of \{7, 5, 6\} is min( max(7, 6), max(5) ) = min(7, 5) = 5.

Help him find the minimum cost of a subsequence of size k.

Input

The first line contains two integers n and k (2 ≤ k ≤ n ≤ 2 ⋅ 10^5) — the size of the array a and the size of the subsequence.

The next line contains n integers a_1, a_2, …, a_n (1 ≤ a_i ≤ 10^9) — the elements of the array a.

Output

Output a single integer — the minimum cost of a subsequence of size k.

Examples

Input


4 2
1 2 3 4


Output


1

Input


4 3
1 2 3 4


Output


2

Input


5 3
5 3 4 2 6


Output


2

Input


6 4
5 3 50 2 4 5


Output


3

Note

In the first test, consider the subsequence s = \{1, 3\}. Here the cost is equal to min(max(1), max(3)) = 1.

In the second test, consider the subsequence s = \{1, 2, 4\}. Here the cost is equal to min(max(1, 4), max(2)) = 2.

In the fourth test, consider the subsequence s = \{3, 50, 2, 4\}. Here the cost is equal to min(max(3, 2), max(50, 4)) = 3.
import java.util.*;
import java.io.*;
import static java.lang.Math.*;
public class A
{
	static InputReader in=new InputReader(System.in);
	static OutputWriter out=new OutputWriter(System.out);    
	static StringBuilder sb=new StringBuilder();
	static long MOD = (long)(998244353);    
	// Main Class Starts Here  
	
	public static int a[];
	public static int n;
	public static int k;
	
	public static boolean func(int num, int mode) {
		int index = 0;
		for(int i=0;i < n;i++) {
			if(mode == 0) {
				index++;
				mode = 1;
			}
			else {
				if(a[i] <= num){
					mode = 0;
					index++;
				}
			}
		}
		if(index >= k) return true;
		return false;
	}
	
	public static int binarysearch(int beg,int last) {
		while(beg < last) {
			int mid = (beg + last) / 2;
			if(func(mid,0) || func(mid,1)) {
				last = mid;
			}
			else {
				beg = mid + 1;
			}
		}
		return beg;
	}
	
	public static void main(String args[])throws IOException
	{
		// Write your code.
		
		int t=1;    
		while(t-->0) {
			n=in();
			k=in();
			a = an(n);
			int ans = binarysearch(1,(int)(1e9));
			app(ans+"\n");
		}    	
		out.printLine(sb);
		out.close();

	}
	public static boolean isPrime(int x) {
		for(int i=3; (i*i) <= x; i++) {
			if(x % i == 0) return false;
		}
		return true;
	}
	
	
	static class Bipair{
		int val;
		int bit;
		public Bipair(int val,int bit) {
			this.val = val;
			this.bit = bit;
		}
	}
	
	static class CircLL{
		// circular linked list.
		Node head;
		Node last;
		public CircLL(long num) {
			head = new Node(num); 
			// pointing to itself.
			last = head;
			last.next = head;
		}    	

		public void add(long num) {
			Node fresh = new Node(num);
			last.next = fresh;
			last = last.next;
			last.next  = head;
		}

		public void print() {
			Node temp = head;    		
			while(temp.next!=head) {    			
				temp = temp.next;
			}    		
			prln("\n");
		}
	}

	static class Node{
		long data;
		Node next;    	
		public Node(long data) {
			this.data=data;
			this.next=null;
		}
	}

	public static int lis(int a[]) {
		int n=a.length;    	
		if(n==0 || n==1)
			return n;
		int dp[] = new int[n];
		for(int i=0;i<n;i++) {
			dp[i] = 1;
			for(int j=0;j<i;j++) {
				if(a[j] < a[i]) {
					dp[i] = Math.max(dp[i], (dp[j]+1));
				}
			}
		}
		Arrays.sort(dp);
		return dp[n-1];
	}

	public static long rev(long n) {
		if(n<10L)
			return n;
		long rev = 0L;
		while(n != 0L) {
			long a = n % 10L;
			rev = a + rev*10L;
			n /= 10L;
		}
		return rev;
	}

	public static long pow(long a,long b) {
		if(b==0)
			return 1L;
		if(b==1)
			return a % MOD;
		long f = a * a;
		if(f > MOD)
			f %= MOD;
		long val = pow(f, b/2) % MOD;
		if(b % 2 == 0)
			return val;
		else {
			long temp = val * (a % MOD);
			if(temp > MOD)
				temp = temp % MOD;
			return temp;
		}
	}

	public static long lcm(long a,long b) {
		long lcm = (a*b)/gcd(a,b);
		return lcm;
	}

	public static long gcd(long a,long b) {
		if(b==0)
			return a;
		return gcd(b, a%b);
	}

	public static int[] an(int n) {
		int ar[]=new int[n];
		for(int i=0;i<n;i++)
			ar[i]=in();
		return ar;
	}

	public static long[] lan(int n) {
		long ar[]=new long[n];
		for(int i=0;i<n;i++)
			ar[i]=lin();
		return ar;
	}    

	public static String atos(Object ar[]) {
		return Arrays.toString(ar);
	}

	public static int in() {
		return in.readInt();
	}

	public static long lin() {
		return in.readLong();
	}    

	public static String sn() {
		return in.readString();
	}

	public static void prln(Object o) {    	
		out.printLine(o);
	}

	public static void prn(Object o) {    	
		out.print(o);
	}

	public static int getMax(int a[]) {
		int n = a.length;
		int max = a[0];
		for(int i=1; i < n; i++) {
			max = Math.max(max, a[i]);
		}
		return max;
	}

	public static int getMin(int a[]) {
		int n = a.length;
		int min = a[0];
		for(int i=1; i < n; i++) {
			min = Math.min(min, a[i]);
		}
		return min;
	}

	public static void display(int a[]) {
		out.printLine(Arrays.toString(a));
	}    

	public static HashMap<Integer,Integer> hm(int a[]){
		HashMap<Integer,Integer> map=new HashMap<>();
		for(int i=0; i < a.length;i++) {
			int keep = (int)map.getOrDefault(a[i],0);
			map.put(a[i],++keep);
		}
		return map;
	}

	public static void app(Object o) {
		sb.append(o);
	}

	public static long calcManhattanDist(int x1,int y1,int x2,int y2) {
		long xa = Math.abs(x1-x2);
		long ya = Math.abs(y1-y2);
		return (xa+ya);
	}


	static class InputReader {
		private InputStream stream;
		private byte[] buf = new byte[1024];
		private int curChar;
		private int numChars;
		private SpaceCharFilter filter;

		public InputReader(InputStream stream) {
			this.stream = stream;
		}

		public int read() {
			if (numChars == -1)
				throw new InputMismatchException();
			if (curChar >= numChars) {
				curChar = 0;
				try {
					numChars = stream.read(buf);
				} catch (IOException e) {
					throw new InputMismatchException();
				}
				if (numChars <= 0)
					return -1;
			}
			return buf[curChar++];
		}

		public int readInt() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			int res = 0;
			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));
			return res * sgn;
		}

		public long readLong() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			int sgn = 1;
			if (c == '-') {
				sgn = -1;
				c = read();
			}
			long res = 0;
			do {
				if (c < '0' || c > '9')
					throw new InputMismatchException();
				res *= 10;
				res += c - '0';
				c = read();
			} while (!isSpaceChar(c));
			return res * sgn;
		}

		public String readString() {
			int c = read();
			while (isSpaceChar(c))
				c = read();
			StringBuilder res = new StringBuilder();
			do {
				res.appendCodePoint(c);
				c = read();
			} while (!isSpaceChar(c));
			return res.toString();
		}

		public boolean isSpaceChar(int c) {
			if (filter != null)
				return filter.isSpaceChar(c);
			return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
		}

		public String next() {
			return readString();
		}

		public interface SpaceCharFilter {
			public boolean isSpaceChar(int ch);
		}
	}

	static class OutputWriter {
		private final PrintWriter writer;

		public OutputWriter(OutputStream outputStream) {
			writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(outputStream)));
		}

		public OutputWriter(Writer writer) {
			this.writer = new PrintWriter(writer);
		}

		public void print(Object...objects) {
			for (int i = 0; i < objects.length; i++) {
				if (i != 0)
					writer.print(' ');
				writer.print(objects[i]);
			}
		}

		public void printLine(Object...objects) {
			print(objects);
			writer.println();
		}

		public void close() {
			writer.close();
		}
	} 
}