Problem:
Score : 300 points

Problem Statement

Given are an integer X and an integer sequence of length N: p_1, \ldots, p_N.

Among the integers not contained in the sequence p_1, \ldots, p_N (not necessarily positive), find the integer nearest to X, that is, find the integer whose absolute difference with X is the minimum. If there are multiple such integers, report the smallest such integer.

Constraints

1 \leq X \leq 100

0 \leq N \leq 100

1 \leq p_i \leq 100

p_1, \ldots, p_N are all distinct.

All values in input are integers.

Input

Input is given from Standard Input in the following format:

X N
p_1 ... p_N

Output

Print the answer.

Sample Input 1

6 5
4 7 10 6 5

Sample Output 1

8

Among the integers not contained in the sequence 4, 7, 10, 6, 5, the one nearest to 6 is 8.

Sample Input 2

10 5
4 7 10 6 5

Sample Output 2

9

Among the integers not contained in the sequence 4, 7, 10, 6, 5, the ones nearest to 10 are 9 and 11. We should print the smaller one, 9.

Sample Input 3

100 0

Sample Output 3

100

When N = 0, the second line in the input will be empty. Also, as seen here, X itself can be the answer.

Solution in Fortran (GNU Fortran 9.2.1) (judge verdict: Accepted)

program main
  implicit none

  integer :: x, y, z, n, i, k
  integer,allocatable :: p(:)

  read(*,*) x, n

  if(n == 0) then
     write(*,*) x
     stop
  end if
  
  allocate(p(n))
  read(*,*) p


  call heapsort(p)

  do i = 1, n
     if(p(i) == x) then
        k = i
        exit
     else
        k = -1
     end if
  end do

  if(k == -1) then
     write(*,*) x
     stop
  else
     if(k == 1) then
        y = x-1
     else
        
        do i = 1, k-1
           if(p(k-i) /= x-i) then
              y = x-i
              exit
           else
              y = x - k
           end if
        end do
     end if

     if(k == n) then
        z = x + 1
     else
        
        do i = 1, n-k
           if(p(k+i) /= x+i) then
              z = x+i
              exit
           else
              z = x + (n - k + 1)
           end if
        end do
     end if
     
  
  end if
  
  if(abs(y-x) <= abs(z-x))then
     write(*,*) y
  else
     write(*,*) z
  end if

  stop
        

  contains
  subroutine heapsort(array)
  implicit none
  integer, intent(inout) :: array(:)
  
  integer :: i,k,j,l
  double precision :: t
  
  if(n <= 0)then
     write(6,*)"Error, at heapsort"; stop
  endif
  if(n == 1)return

  l=n/2+1
  k=n
  do while(k /= 1)
     if(l > 1)then
        l=l-1
        t=array(L)
     else
        t=array(k)
        array(k)=array(1)
        k=k-1
        if(k == 1) then
           array(1)=t
           exit
        endif
     endif
     i=l
     j=l+l
     do while(j <= k)
        if(j < k)then
           if(array(j).lt.array(j+1))j=j+1
        endif
        if (t < array(j))then
           array(i)=array(j)
           i=j
           j=j+j
        else
           j=k+1
        endif
     enddo
     array(i)=t
  enddo

  return
end subroutine heapsort

end program main