#include <chrono>
#include <future>
#include <iostream>
#include <thread>

int subtask1(int x) {
  std::this_thread::sleep_for(std::chrono::milliseconds(1000));
  return x;
}

int subtask2(int x) {
  std::this_thread::sleep_for(std::chrono::milliseconds(500));
  return x;
}

int run(int a, int b) {
  std::future<int> result1 = std::async(std::launch::async, subtask1, a);

  int result2 = subtask2(b);
  if (result2 < 0) {
    return -2;
  }

  if (result1.get() < 0) {
    return -1;
  }

  return 0;
}

int main(int argc, char **argv) {
  if (argc < 3) {
    std::cerr << "usage: " << argv[0] << " [int] [int]" << std::endl;
    return 1;
  }

  std::cout << run(std::stoi(argv[1]), std::stoi(argv[2])) << std::endl;
  return 0;
}
