/**
 * code generated by JHelper
 * More info: https://github.com/AlexeyDmitriev/JHelper
 * @author aajisaka
 */


#include<bits/stdc++.h>

using namespace std;

void debug_out() { cerr << endl; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << to_string(H);
  debug_out(T...);
}
#ifdef LOCAL
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#else
#define debug(...) 42
#endif

#define SPEED ios_base::sync_with_stdio(false);cin.tie(nullptr)
#define rep(i,n) for(int i=0; i<(int)(n); i++)
#define all(v) v.begin(), v.end()
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }

using ll = long long;
using ull = unsigned long long;
using P = pair<ll, ll>;

constexpr long double PI = 3.14159265358979323846264338327950288L;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

class FCoprimePresent {
public:
    void solve(istream& cin, ostream& cout) {
      SPEED;
      ll a, b; cin >> a >> b;
      vector<int> prime = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
                           31, 37, 41, 43, 47, 53, 59, 61, 67, 71};

      int t = 1<<20;
      vector<ll> dp(t);
      dp[0] = 1;

      for(ll i=a; i<=b; i++) {
        int now = 0;
        rep(j, 20) {
          if (i%prime[j] == 0) {
            now += (1<<j);
          }
        }
        auto dp2 = dp;
        rep(j, t) {
          if ((j&now)==0) {
            dp2[j|now] += dp[j];
          }
        }
        swap(dp, dp2);
      }
      ll ret = 0;
      rep(i, t) {
        ret += dp[i];
      }
      cout << ret << endl;
    }
};

signed main() {
  FCoprimePresent solver;
  std::istream& in(std::cin);
  std::ostream& out(std::cout);
  solver.solve(in, out);
  return 0;
}
#include<iostream>
using namespace std;

int main() {
  int a, b;
  cin >> a >> b;
  cout << (a+b)/2 << " " << (a-b)/2 << endl;
  return 0;
}