At regular competition Vladik and Valera won a and b candies respectively. Vladik offered 1 his candy to Valera. After that Valera gave Vladik 2 his candies, so that no one thought that he was less generous. Vladik for same reason gave 3 candies to Valera in next turn.

More formally, the guys take turns giving each other one candy more than they received in the previous turn.

This continued until the moment when one of them couldn’t give the right amount of candy. Candies, which guys got from each other, they don’t consider as their own. You need to know, who is the first who can’t give the right amount of candy.

Input

Single line of input data contains two space-separated integers a, b (1 ≤ a, b ≤ 109) — number of Vladik and Valera candies respectively.

Output

Pring a single line "Vladik’’ in case, if Vladik first who can’t give right amount of candy, or "Valera’’ otherwise.

Examples

Input

1 1


Output

Valera


Input

7 6


Output

Vladik

Note

Illustration for first test case:

<image>

Illustration for second test case:

<image>
#include <bits/stdc++.h>
using namespace std;
inline long long fmm(long long a, long long b, long long m = 1000000007) {
  long long r = 0;
  a %= m;
  b %= m;
  while (b > 0) {
    if (b & 1) {
      r += a;
      r %= m;
    }
    a += a;
    a %= m;
    b >>= 1;
  }
  return r % m;
}
inline long long fme(long long a, long long b, long long m = 1000000007) {
  long long r = 1;
  a %= m;
  while (b > 0) {
    if (b & 1) {
      r *= a;
      r %= m;
    }
    a *= a;
    a %= m;
    b >>= 1;
  }
  return r % m;
}
inline long long sfme(long long a, long long b, long long m = 1000000007) {
  long long r = 1;
  a %= m;
  while (b > 0) {
    if (b & 1) r = fmm(r, a, m);
    a = fmm(a, a, m);
    b >>= 1;
  }
  return r % m;
}
std::vector<long long> primes;
long long primsiz;
std::vector<long long> fact;
std::vector<long long> invfact;
inline void sieve(long long n) {
  long long i, j;
  std::vector<bool> a(n);
  a[0] = true;
  a[1] = true;
  for (i = 2; i * i < n; ++i) {
    if (!a[i]) {
      for (j = i * i; j < n; j += i) {
        a[j] = true;
      }
    }
  }
  for (i = 2; i < n; ++i)
    if (!a[i]) primes.push_back(i);
  primsiz = primes.size();
}
inline void sieve() {
  long long n = 1010000, i, j, k = 0;
  std::vector<bool> a(n);
  primes.resize(79252);
  a[0] = a[1] = true;
  for (i = 2; (j = (i << 1)) < n; ++i) a[j] = true;
  for (i = 3; i * i < n; i += 2) {
    if (!a[i]) {
      k = (i << 1);
      for (j = i * i; j < n; j += k) a[j] = true;
    }
  }
  k = 0;
  for (i = 2; i < n; ++i)
    if (!a[i]) primes[k++] = i;
  primsiz = k;
}
inline bool isPrimeSmall(unsigned long long n) {
  if (((!(n & 1)) && n != 2) || (n < 2) || (n % 3 == 0 && n != 3)) return false;
  for (unsigned long long k = 1; 36 * k * k - 12 * k < n; ++k)
    if ((n % (6 * k + 1) == 0) || (n % (6 * k - 1) == 0)) return false;
  return true;
}
bool _p(unsigned long long a, unsigned long long n) {
  unsigned long long t, u, i, p, c = 0;
  u = n / 2, t = 1;
  while (!(u & 1)) {
    u /= 2;
    ++t;
  }
  p = fme(a, u, n);
  for (i = 1; i <= t; ++i) {
    c = (p * p) % n;
    if ((c == 1) && (p != 1) && (p != n - 1)) return 1;
    p = c;
  }
  if (c != 1) return 1;
  return 0;
}
inline bool isPrime(unsigned long long n) {
  if (((!(n & 1)) && n != 2) || (n < 2) || (n % 3 == 0 && n != 3)) return 0;
  if (n < 1373653) {
    for (unsigned long long k = 1; (((36 * k * k) - (12 * k)) < n); ++k)
      if ((n % (6 * k + 1) == 0) || (n % (6 * k - 1) == 0)) return 0;
    return 1;
  }
  if (n < 9080191) {
    if (_p(31, n) || _p(73, n)) return 0;
    return 1;
  }
  if (_p(2, n) || _p(7, n) || _p(61, n)) return 0;
  return 1;
}
unsigned long long nCk(long long n, long long k,
                       unsigned long long m = 1000000007) {
  if (k < 0 || k > n || n < 0) return 0;
  if (k == 0 || k == n) return 1;
  if (fact.size() >= (unsigned long long)n && isPrime(m)) {
    return (((fact[n] * invfact[k]) % m) * invfact[n - k]) % m;
  }
  unsigned long long i = 0, j = 0, a = 1;
  k = ((k) < (n - k) ? (k) : (n - k));
  for (; i < (unsigned long long)k; ++i) {
    a = (a * (n - i)) % m;
    while (j < (unsigned long long)k && (a % (j + 1) == 0)) {
      a = a / (j + 1);
      ++j;
    }
  }
  while (j < (unsigned long long)k) {
    a = a / (j + 1);
    ++j;
  }
  return a % m;
}
void nCkInit(unsigned long long m = 1000000007) {
  long long i, mx = 1010000;
  fact.resize(mx + 1);
  invfact.resize(mx + 1);
  fact[0] = 1;
  for (i = 1; i <= mx; ++i) {
    fact[i] = (i * fact[i - 1]) % m;
  }
  invfact[mx] = fme(fact[mx], m - 2, m);
  for (i = mx - 1; i >= 0; --i) {
    invfact[i] = (invfact[i + 1] * (i + 1)) % m;
  }
}
template <class T>
T gcd(T a, T b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
void extGCD(long long a, long long b, long long &x, long long &y) {
  if (b == 0) {
    x = 1, y = 0;
    return;
  }
  long long x1, y1;
  extGCD(b, a % b, x1, y1);
  x = y1;
  y = x1 - (a / b) * y1;
}
inline void get(long long &x) {
  int n = 0;
  x = 0;
  char c = getchar_unlocked();
  if (c == '-') n = 1;
  while (c < '0' || c > '9') {
    c = getchar_unlocked();
    if (c == '-') n = 1;
  }
  while (c >= '0' && c <= '9') {
    x = (x << 3) + (x << 1) + c - '0';
    c = getchar_unlocked();
  }
  if (n) x = -x;
}
inline int get(char *p) {
  char c = getchar_unlocked();
  int i = 0;
  while (c != '\n' && c != '\0' && c != ' ' && c != '\r' && c != EOF) {
    p[i++] = c;
    c = getchar_unlocked();
  }
  p[i] = '\0';
  return i;
}
inline void put(long long a) {
  int n = (a < 0 ? 1 : 0);
  if (n) a = -a;
  char b[20];
  int i = 0;
  do {
    b[i++] = a % 10 + '0';
    a /= 10;
  } while (a);
  if (n) putchar_unlocked('-');
  i--;
  while (i >= 0) putchar_unlocked(b[i--]);
  putchar_unlocked(' ');
}
inline void putln(long long a) {
  int n = (a < 0 ? 1 : 0);
  if (n) a = -a;
  char b[20];
  int i = 0;
  do {
    b[i++] = a % 10 + '0';
    a /= 10;
  } while (a);
  if (n) putchar_unlocked('-');
  i--;
  while (i >= 0) putchar_unlocked(b[i--]);
  putchar_unlocked('\n');
}
const int K = 3;
std::vector<std::vector<long long> > mul(std::vector<std::vector<long long> > a,
                                         std::vector<std::vector<long long> > b,
                                         unsigned long long m = 1000000007) {
  std::vector<std::vector<long long> > c(K, std::vector<long long>(K));
  for (int ii = 0; ii < (K); ++ii)
    for (int jj = 0; jj < (K); ++jj)
      for (int kk = 0; kk < (K); ++kk)
        c[ii][jj] = (c[ii][jj] + a[ii][kk] * b[kk][jj]) % m;
  return c;
}
std::vector<std::vector<long long> > fme(std::vector<std::vector<long long> > a,
                                         unsigned long long n,
                                         unsigned long long m = 1000000007) {
  if (n == 1) return a;
  if (n & 1) return mul(a, fme(a, n - 1, m), m);
  std::vector<std::vector<long long> > x = fme(a, n / 2, m);
  return mul(x, x, m);
}
int main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(NULL);
  std::cout.tie(NULL);
  long long t = 0, n = 0, m = 0, maxx = 0, minn = 0, curr = 0, k = 0, num = 0,
            siz = 0, n1 = 0, n2 = 0, n3 = 0, n4 = 0, ind = 0;
  long long root = 0, sum = 0, diff = 0, q = 0, choice = 0, d = 0, len = 0,
            begg = 0, endd = 0, pos = 0, cnt = 0, lo = 0, hi = 0, mid = 0,
            ans = 0;
  bool flag = false;
  std::string s1, s2, s3, str;
  char ch, ch1, ch2, ch3, *ptr;
  double dub = 0;
  cin >> n1 >> n2;
  root = 1;
  while (1) {
    if (pos == 0) {
      if (n1 < root) break;
      n1 -= root;
    } else {
      if (n2 < root) break;
      n2 -= root;
    }
    ++root;
    pos = 1 - pos;
  }
  if (pos == 0)
    cout << "Vladik";
  else
    cout << "Valera";
  return 0;
}
