#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const long long LLINF = 9223372036854775807;
const int maxn = 100010;
int xors[maxn] = {0};
int grundy[maxn] = {0};
bool mex[maxn] = {0};
int tres[maxn] = {0};
bool calc(int d1, int d2, pair<int, int> &r) {
  int b = d1 + d2 - 1;
  if (b & 1) return false;
  b /= 2;
  int a = d1 - b;
  if (a >= b) return false;
  if (a < 1) return false;
  r = make_pair(a, b);
  return true;
}
int main() {
  int n;
  cin >> n;
  int tcnt = 0;
  int res = -1;
  int mincnt = maxn + 100;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j * j <= 2 * i; ++j) {
      if ((2 * i) % j == 0) {
        int d1 = j, d2 = 2 * i / j;
        pair<int, int> temp;
        for (int k = 0; k < 2; ++k) {
          if (calc(d1, d2, temp)) {
            int cx = xors[temp.second] ^ xors[temp.first - 1];
            if (i == n && cx == 0 && temp.second - temp.first + 1 < mincnt) {
              mincnt = temp.second - temp.first + 1;
            }
            tres[tcnt++] = cx;
            mex[cx] = true;
          }
          swap(d1, d2);
        }
      }
    }
    for (int j = 0;; ++j)
      if (!mex[j]) {
        grundy[i] = j;
        xors[i] = xors[i - 1] ^ grundy[i];
        break;
      }
    for (int j = 0; j < tcnt; ++j) mex[tres[j]] = false;
    tcnt = 0;
  }
  if (mincnt == maxn + 100)
    cout << -1;
  else
    cout << mincnt;
  return 0;
}
