#include using namespace std; typedef long long ll; typedef long double ld; #define REP(i, n) for (int i = 0; i < (n); ++i) #define REPR(i, n) for (int i = n - 1; i >= 0; --i) #define FOR(i, m, n) for (int i = m; i < n; ++i) #define FORR(i, m, n) for (int i = m; i >= n; --i) #define ALL(v) (v).begin(),(v).end() #define ALLR(v) (v).rbegin(),(v).rend() #define fi first #define se second #define PB push_back #define EB emplace_back using P = pair; template using PQ = priority_queue; template using QP = priority_queue,greater>; templatevoid debug(const T &v,ll h,ll w){for(ll i=0;ivoid debug(const T &v,ll n){for(ll i=0;ivoid debug(const vector&v){debug(v,v.size());} templatevoid debug(const vector>&v){for(auto &vv:v)debug(vv,vv.size());} templatevoid debug(stack st){while(!st.empty()){cout<void debug(queue st){while(!st.empty()){cout<void debug(deque st){while(!st.empty()){cout<void debug(PQ st){while(!st.empty()){cout<void debug(QP st){while(!st.empty()){cout<void debug(const set&v){for(auto z:v)cout<void debug(const multiset&v){for(auto z:v)cout<void debug(const array &a){for(auto z:a)cout<void debug(const map&v){for(auto z:v)cout<<"["<bool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b mem; bool p(ll n){ if(mem.count(n)) return mem[n]; ll num=n; for(ll i=2;i*i<=n;i++){ while(num%i==0) num/=i; } return mem[n]=(n!=1&&num==n); } int main(){ cin.tie(0); ios::sync_with_stdio(false); ll y,x;cin >> y >> x; auto f=[&](auto &&f,ll s,ll t,bool fir=true)->bool{ if(s!=y||t!=x){ if(p(s)||p(t)){ return fir; } } bool res; if(fir){ res=false; res|=f(f,s+1,t,!fir); res|=f(f,s,t+1,!fir); } else{ res=true; res&=f(f,s+1,t,!fir); res&=f(f,s,t+1,!fir); } return res; }; if(p(y)&&p(x)){ cout << "First" << endl; return 0; } ll py=-1,px=-1; for(ll i=y+1;i<=y+10;i++) if(p(i)) py=i; for(ll i=x+1;i<=x+10;i++) if(p(i)) px=i; if(y<10||x<10){ bool can=f(f,y,x); cout << (can?"First":"Second") << endl; } else{ ll res=py-y+px-x; cout << (res&1?"First":"Second") << endl; } }