#include <bits/stdc++.h>
using namespace std;
#include <bits/stdc++.h>
using namespace std;
const int N = 5;
long long a, b, cnt, num, root, sum[N], Gd[N], dfn[N], low[N], head[N], iscut[N];
struct node{
long long x;
int u, v, nxt;
}g[N];
void add (int x, int y, long long w) {
g[++ cnt] = {x, y, w, head[x]};
head[x] = cnt;
}
void Tarjan (int now, int fa) {
dfn[now] = ++ cnt;
low[now] = cnt;
int child = 0;
for(int i = head[now]; i; i = g[i].nxt) {
int v = g[i].v;
if(!dfn[v]) {
child ++;
Tarjan(v, now);
low[now] = min(low[now], low[v]);
if(fa != now && dfn[now] <= low[v] && iscut[now] == false) {
++ num;
iscut[now] = true;
}
} else if(v != fa)
low[now] = min(low[now], dfn[v]);
}
if(fa == now && child >= 2 && iscut[now] == false) {
++ num;
iscut[now] = true;
}
}
template <typename T> inline void writeT (T x) {
if(x < 0) {
putchar('-');
x = -x;
}
if(x > 9) {
writeT(x / 10);
}
putchar(x % 10 + '0');
return;
}
template <typename T> inline void readT (T &x) {
bool f = 1;
x = 0;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-') {
f = !f;
ch = getchar();
}
}
while (ch >= '0' && ch <= '9') {
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = getchar();
}
x = f * x;
return;
}
int main () {
readT(a);
readT(b);
add(1, 2, a);
add(1, 3, b);
cnt = 0;
Tarjan(1, 1);
num = 0;
for(int i = 1; i <= 3; i ++) {
if(iscut[i] == true)
Gd[++ num] = i;
}
for(int i = 1; i <= num; i ++) {
for(int j = 1; j <= 3; j ++) {
if(g[j].u != Gd[i])
break;
sum[i] += g[j].x;
}
}
long long maxx = 0;
for(int i = 1; i <= num; i ++)
maxx = max(maxx, sum[i]);
cout << maxx;
return 0;
}
神马玩意呀???怎么A+B都不对了???