// Runs in 0.035 sec
#include <cstdint>
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main();
typedef uint_fast32_t number;
typedef uint_fast32_t sequencelength;
class lengthsbase
{
static const size_t cachesize;
vector<sequencelength> t;
typedef uint_fast32_t index;
static number indextonumber(index);
static index numbertoindex(number);
static const number maxcachednumber;
public:
lengthsbase();
const sequencelength operator[] (number);
class iterator;
iterator find(number);
} b;
class lengthsbase::iterator:
public ::iterator<forward_iterator_tag, sequencelength const, void>
{
friend class lengthsbase;
lengthsbase &b;
number i;
iterator(lengthsbase&, number);
public:
iterator &operator=(const iterator&);
iterator &operator++();
friend bool operator==(const iterator&, const iterator&);
const sequencelength operator*() const;
};
int main()
{
ios_base::sync_with_stdio(false);
number i, j;
while(cin >> i >> j)
cout << i << ' ' << j << ' '
<< *max_element(b.find(min(i,j)), ++b.find(max(i,j)))
<< '\n';
return 0;
}
const sequencelength lengthsbase::operator[] (number i)
{
number next = i%2 == 0 ? i/2 : 3*i+1;
if(i>maxcachednumber)
return operator[](next)+1;
if(t[numbertoindex(i)] == 0)
t[numbertoindex(i)] = i == 1 ? 1 : operator[](next) + 1;
return t[numbertoindex(i)];
}
lengthsbase::iterator lengthsbase::find(number i)
{
return iterator(*this, i);
}
const size_t lengthsbase::cachesize = 0x100000;
const number lengthsbase::maxcachednumber = indextonumber(cachesize-1);
lengthsbase::lengthsbase() : t(cachesize, 0) {}
number lengthsbase::indextonumber(lengthsbase::index i)
{
return i+1;
}
lengthsbase::index lengthsbase::numbertoindex(number i)
{
return i-1;
}
const sequencelength lengthsbase::iterator::operator *() const
{
return b[i];
}
lengthsbase::iterator::iterator(lengthsbase &b, const number i): b(b), i(i) {}
lengthsbase::iterator &lengthsbase::iterator::operator=
(const lengthsbase::iterator &it)
{
b=it.b;
i=it.i;
return *this;
}
lengthsbase::iterator &lengthsbase::iterator::operator ++()
{
++i;
return *this;
}
bool operator ==
(const lengthsbase::iterator &it, const lengthsbase::iterator &jt)
{
return &(it.b) == &(jt.b) && it.i == jt.i;
}
bool operator !=
(const lengthsbase::iterator &it, const lengthsbase::iterator &jt)
{
return !(it == jt);
}