using System;
using System.Numerics;
using System.Linq;
using System.Collections.Generic;
using System.Text;
namespace Atcoder20200405
{
class ProgramA
{
static void Main(string args)
{
//入力
string a = Console.ReadLine().Split(' ');
long s = long.Parse(a[0]);
long l = long.Parse(a[1]);
long r = long.Parse(a[2]);
//sの位置に応じて場合分けする
if(s < l)
Console.WriteLine(l);
else if(r < s)
Console.WriteLine(r);
else
Console.WriteLine(s);
}
}
class ProgramB
{
static void Main(string args)
{
//入力
int n = int.Parse(Console.ReadLine());
var r = new List<int>();
var b = new List<int>();
//RかBかでそれぞれリストを作る
for(int i = 0;i < n;i++)
{
string a = Console.ReadLine().Split(' ');
if(a[1] == "R")
r.Add(int.Parse(a[0]));
else
b.Add(int.Parse(a[0]));
}
//それぞれソートする
r.Sort();
b.Sort();
//Rの方を小さい順に取り出す
foreach(var s in r)
{
Console.WriteLine(s);
}
//Bの方を小さい順に取り出す
foreach(var s in b)
{
Console.WriteLine(s);
}
}
}
class ProgramC
{
//あらかじめ設定したものはそのままやる
public static int a1;
public static int a2;
public static int a3;
public static int ans = 0;
static void Main(string args)
{
//入力
string s = Console.ReadLine().Split(' ');
a1 = int.Parse(s[0]);
a2 = int.Parse(s[1]);
a3 = int.Parse(s[2]);
//深さ優先検索
dfs(1,0,0);
Console.WriteLine(ans);
}
//積立方法を考える
static void dfs(int x, int y, int z)
{
//もし、規定より大きくなればそれは満たさないので省く
if(a1 < x || a2 < y || a3 < z)
return;
//もし、今の積み方が満たすならカウントする
if(x == a1 && y == a2 && z == a3)
{
ans++;
return;
}
//とりあえず縦に積むケース
dfs(x + 1, y, z);
//xよりyが小さければ積むことができるのでそのケースを見る
if(x > y)
dfs(x, y + 1, z);
//同様にyよりzが小さければ積むことができるのでそのケースを見る
if(y > z)
dfs(x, y, z + 1);
}
}
class ProgramD
{
static void Main(string args)
{
//入力
string p = Console.ReadLine().Split(' ');
long n = long.Parse(p[0]);
long q = long.Parse(p[1]);
string a = Console.ReadLine().Split(' ');
long an = new long[n];
long gcdn = new long[n];
for(int i = 0; i < n;i++)
an[i] = long.Parse(a[i]);
//i番目までの最大公約数を求めておく(メモ化)
for(int i = 0; i < n;i++)
{
if(i == 0)
{
gcdn[0] = an[0];
continue;
}
gcdn[i] = gcd(an[i], gcdn[i -1]);
}
string s = Console.ReadLine().Split(' ');
for(int i = 0; i < q;i++)
{
long t = long.Parse(s[i]);
//最後の数と比較して公約数があるか見る
if(gcd(gcdn[n-1], t) != 1)
{
//公約数があると最後まで割り切れないので答えはその最大公約数
Console.WriteLine(gcd(gcdn[n-1], t));
continue;
}
//どこであるか判定
long max = n - 1;
long min = 0;
long temp = 0;
//二分探索法。
while(max != min + 1)
{
//とりあえず真ん中の数でそれより大きいか小さいかを探す
temp = (max + min) /2;
//実際最小公約数を求めて1ならより小さい解を、それ以外は大きい解を考える
if(gcd(gcdn[temp], t) == 1)
max = temp;
else
min = temp;
}
//この探索だとminの保障はないため最後に確認
if(gcd(gcdn[min - 1], t) == 1)
Console.WriteLine(min + 1);
else
Console.WriteLine(max + 1);
}
}
/*最大公約数を求める関数*/
static long gcd(long p, long q)
{
if(p < q)
{
long temp = p;
p = q;
q = temp;
}
long r = 1;
while(r != 0)
{
r = p % q;
p = q;
q = r;
}
return p;
}
}
}